下面是TCP_NODELAY/SO_LINGER/SO_NOSIGPIPE/MSG_NOSIGNAL的设置方法:
其中由于平台的不同,区分SO_NOSIGPIPE和MSG_NOSIGNAL有所分区:
int optval = 1;
// turn off SIGPIPE signal
#ifdef __linux__
setsockopt(m_Sockfd, SOL_SOCKET, MSG_NOSIGNAL, &optval, sizeof(optval));
#else
setsockopt(m_Sockfd, SOL_SOCKET, SO_NOSIGPIPE, &optval, sizeof(optval));
#endif
// set SO_LINGER so socket closes gracefully
struct linger ling;
ling.l_onoff = 1;
ling.l_linger = 10;
setsockopt(m_Sockfd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
// disable the Nagle algorithm so that small packets get sent immediately
int flag = 1;
setsockopt(m_Sockfd, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(int));
另外转载一篇:
setsockopt设置 SO_LINGER 选项
此选项指定函数close对面向连接的协议如何操作(如TCP)。内核缺省close操作是立即返回,如