有时候在Socket接收和发送数据的时候需要判断该操作是否超时,先设置socket 发送和接收超时的代码为:
int TimeOut=5000; //设置发送超时6秒
if(::setsockopt(m_Sock,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
//"socket设置发送超时失败"
}
if(::setsockopt(m_Sock,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
//"socket设置接收超时失败"
}
在初始化的时候设置;
在send 和recv函数前后记录时间,判断时间戳,即可判断是否超时
CTime tS = CTime::GetCurrentTime();
int nSendSize = send(m_Sock,buff,i+1,0);
CTime tE = CTime::GetCurrentTime();
CTimeSpan tt = tE - tS;
if(tt.GetTotalSeconds() >= 5)
{
CString strMsg = _T("发送数据超时");
}