设置TCP阻塞模式下的发送和接收函数超时时间

我们在进行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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值