当前位置: 技术问答>linux和unix
recv效率低下的问题
来源: 互联网 发布时间:2017-03-01
本文导语: 如题,我在 linux 下调用recv,执行2277000次,总耗时90139966微秒 平均下来是39微秒一次,这个效率貌似不是很高啊! 我对recv的socket设置了如下属性 int i_buffer_size = INT_MAX; if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, ...
如题,我在 linux 下调用recv,执行2277000次,总耗时90139966微秒
平均下来是39微秒一次,这个效率貌似不是很高啊!
我对recv的socket设置了如下属性
平均下来是39微秒一次,这个效率貌似不是很高啊!
我对recv的socket设置了如下属性
int i_buffer_size = INT_MAX;
if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
(const char*)(&i_buffer_size), sizeof(int)) == -1) {
LOG_MSG("Socket Error: Adjust SO_RCVBUF failed.%s", strerror(errno));
return false;
}
if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
(const char*)(&i_buffer_size), sizeof(int)) == -1) {
LOG_MSG("Socket Error: Adjust SO_SNDBUF failed.%s", strerror(errno));
return false;
}
int bOptVal = 1;
int bOptLen = sizeof(int);
if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE,
(const char*)&bOptVal,bOptLen) == -1) {
LOG_MSG("Socket Error: Adjust SO_KEEPALIVE failed.%s", strerror(errno));
return false;
}
if (setsockopt(sock,IPPROTO_TCP,TCP_NODELAY,
(const char*)&bOptVal,bOptLen) == -1) {
LOG_MSG("Socket Error: Adjust TCP_NODELAY failed.%s", strerror(errno));
return false;
}
if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,
(const char*)&bOptVal,bOptLen) == -1) {
LOG_MSG("Enable SO_REUSEADDR failed.%s", strerror(errno));
return false;
}
struct linger lgr;
memset(&lgr, 0x00, sizeof(struct linger));
lgr.l_onoff = 0;
if (setsockopt(sock, SOL_SOCKET, SO_LINGER,
(const char*)&lgr, sizeof(linger)) == -1) {
LOG_MSG("Socket Error: Adjust SO_LINGER failed.%s", strerror(errno));
return false;
}
// linux kernel introduced
bOptVal = 0;
if (setsockopt(sock, IPPROTO_TCP, TCP_CORK,
(const char*)&bOptVal, bOptLen) == -1) {
LOG_MSG("Socket Error: Adjust TCP_CORK failed.%s", strerror(errno));
return false;
}
// set socket to be non-blocking
int on = 1;
if (ioctl(sock,FIONBIO,(const char*)&on)