我们在进行socket通信过程中,尤其是客户、服务端之间的多线程通信,更多 的时候使用TCP流的形式进行收发数据,因为TCP可靠性传输数据。
但是我们假设客户端出现异常,或者异常断开连接而服务端此时却不知道,还再傻傻的等,这样就会造成一个socket连接资源被占用。所以我们
更好的做法就是设定超时机制,在规定的时间范围内如果没有任何请求,服务端将socket连接断开,等待客户端的下一次连接。
设置socket的recv() 和send() 函数的超时时间:
bool SetSocketTimeOut(SOCKET sock, long t)
{
DWORD TimeOut=t;
if(::setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
cout << "设置SOCKET发送缓冲区超时时间失败"<<endl;
return false;
}
TimeOut = t;
if(::setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
cout <<"设置SOCKET接收缓冲区超时时间失败" <<endl;
return false;
}
return true;
}
注意:setsockopt的第三个参数:一个是SO_SNDTIMEO和SO_REVTIMEO;一个是发送超时,另一个是接收超时。
好了,今天有关于socket的超时就介绍到这里,如果有什么不明白的地方或者我哪里说错了,请及时联系我,新浪邮箱:chao_song2011@sina.cn