我设置了socket的发送超时和接收超时代码如下:
struct timeval timeo;
socklen_t len = sizeof(timeo);
timeo.tv_sec = 20;
if (::setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeo,len)!=0)
{
Close();
return FALSE;
} if (::setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeo,len)!=0)
{
Close();
return FALSE;
}
问题1:这段代码写在socket连接之前和之后应该没什么区别吧?
问题2:recv的时候经常出现错误,错误代码用WSAGetLastError()获取了一下值,是10060 也就是超时,怎么会出现这种状况,有时候数据接受了一部分之后就超时了,有时候根本就没接收到数据。
struct timeval timeo;
socklen_t len = sizeof(timeo);
timeo.tv_sec = 20;
if (::setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeo,len)!=0)
{
Close();
return FALSE;
} if (::setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeo,len)!=0)
{
Close();
return FALSE;
}
问题1:这段代码写在socket连接之前和之后应该没什么区别吧?
问题2:recv的时候经常出现错误,错误代码用WSAGetLastError()获取了一下值,是10060 也就是超时,怎么会出现这种状况,有时候数据接受了一部分之后就超时了,有时候根本就没接收到数据。
这是本机测试吗?
还是不同机器测试,网络不好
问题2:默认情况下,套接字没有设置超时机制,因而recv不会返回超时错误,你自己设置超时值后,recv就会根据你设置的超时值返回timeout。