29,031
社区成员
发帖
与我相关
我的任务
分享
int m_nSocket=socket(AF_INET,SOCK_STREAM,0);
//强制关闭
linger Linger;
Linger.l_onoff=1;
Linger.l_linger=0;
setsockopt(m_nSocket,SOL_SOCKET,SO_LINGER,(const char *)&Linger,sizeof(Linger));
//复用端口
int bReuseAddr=1;
setsockopt(m_nSocket,SOL_SOCKET,SO_REUSEADDR,(const char *)&bReuseAddr,sizeof(int));
//Nagle算法
int bNoDelay=1;
if(setsockopt(m_nSocket,IPPROTO_TCP,TCP_NODELAY,(const char *)&bNoDelay,sizeof(int))!=0)
throw("TCP_NODELAY ERROR");
//开启心跳检测
int bKeepAlive=1;
setsockopt(m_nSocket,SOL_SOCKET,SO_KEEPALIVE,(char*)&bKeepAlive,sizeof(int));
int n=HEARTBEAT_FIRST_TIME;
setsockopt(m_nSocket,IPPROTO_TCP,TCP_KEEPINTVL,&n,sizeof(int)); //这里返回-1,errno是42
这算是完整代码吧,把上面那些屏蔽了 只开启心跳检测 还是不行哈[/quote]
错误是用perror打印的吗?应该有错误描述啊?
int m_nSocket=socket(AF_INET,SOCK_STREAM,0);
//强制关闭
linger Linger;
Linger.l_onoff=1;
Linger.l_linger=0;
setsockopt(m_nSocket,SOL_SOCKET,SO_LINGER,(const char *)&Linger,sizeof(Linger));
//复用端口
int bReuseAddr=1;
setsockopt(m_nSocket,SOL_SOCKET,SO_REUSEADDR,(const char *)&bReuseAddr,sizeof(int));
//Nagle算法
int bNoDelay=1;
if(setsockopt(m_nSocket,IPPROTO_TCP,TCP_NODELAY,(const char *)&bNoDelay,sizeof(int))!=0)
throw("TCP_NODELAY ERROR");
//开启心跳检测
int bKeepAlive=1;
setsockopt(m_nSocket,SOL_SOCKET,SO_KEEPALIVE,(char*)&bKeepAlive,sizeof(int));
int n=HEARTBEAT_FIRST_TIME;
setsockopt(m_nSocket,IPPROTO_TCP,TCP_KEEPINTVL,&n,sizeof(int)); //这里返回-1,errno是42
这算是完整代码吧,把上面那些屏蔽了 只开启心跳检测 还是不行哈