在公司代码中看到如下设置socket connect函数超时的方法:
1.先调用WSAEventSelect将socket设置成非阻塞socket,示例:
WSAEventSelect(hSocket, hNetEvent, FD_WRITE| FD_READ | FD_CLOSE | FD_CONNECT);
2.调用connect函数进行连接,如果返回错误,检测错误值是不是WSAEWOULDBLOCK,如果是再调用WaitForSingleObject或WaitForMultiObjects等待事件hNetSocket,在WaitForSingleObject或WaitForMultiObjects设置超时值。
3.如果在规定时间内连接成功以后,调用WSAEnumNetworkEvents检测是否是连接事件,示例代码:
<span style="white-space:pre"> </span>WSANETWORKEVENTS netEvents;
if (WSAEnumNetworkEvents(m_hSocket, m_eventNet.GetEvent(), &netEvents) != 0)
{
m_nLastError = WSAGetLastError();
WRITE_ERROR_LOG(RCMOBILE_MODDULE_CONNECT_GUID, _T(" RCAsyncSocket::Connect Error 04 WSAEnumNetworkEvents error with ErrorCode %d"), m_nLastError);
ret