23,121
社区成员
发帖
与我相关
我的任务
分享
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) < 0) {
LOG_MSG("Enable non-blocking mode failed.%s", strerror(errno));
return false;
}
return true;
ret = recv(sock, (char*)((char*)(buf)+received), request,MSG_DONTWAIT);