程序中的代码:
timeout = 100;
ret = setsockopt(m_hSocket, SOL_SOCKET, SO_RCVTIMEO,
(char*)&timeout, sizeof(timeout));
if(ret == SOCKET_ERROR)
{
if (m_hSocket != INVALID_SOCKET) {
closesocket(m_hSocket);
}
return FALSE;
}
ret = setsockopt(m_hSocket, SOL_SOCKET, SO_SNDTIMEO,
(char*)&timeout, sizeof(timeout));
if (ret == SOCKET_ERROR)
{
if (m_hSocket != INVALID_SOCKET) {
closesocket(m_hSocket);
}
return FALSE;
}
在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限:
int nNetTimeout=1000;//1秒
//发送时限
setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));
//接收时限
setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));
SO_RCVTIMEO and SO_SNDTIMEO
When using the recv function, if no data arrives during the period specified in SO_RCVTIMEO, the recv function completes.
If a send or receive operation times out on a socket, the socket state is indeterminate, and should not be used; 超时后不可靠,在此实例中,m_hSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); socket使用的协议是icmp,socket不可靠直接Close并返回FALSE。
本文介绍了如何通过使用setsockopt函数来为套接字发送和接收操作设置超时时间,以确保在网络状况不佳时能够及时处理。当发送或接收操作超过设定的时间限制时,将触发超时,并关闭不可靠的套接字。
623

被折叠的 条评论
为什么被折叠?



