18,357
社区成员




int err = -1;
int len = sizeof(int);
FD_SET fd = {1, hSocket};
TIMEVAL tv = {dwTimeout, 0};
unsigned long ul = 1;
// 设置为非阻塞模式
ioctlsocket(hSocket, FIONBIO, &ul);
// 连接
if(connect(hSocket, pSocketAddress, nAddrLen) != SOCKET_ERROR)
{
// 连接成功
return (SOCKET_SUCCESS);
}
int iErr = WSAGetLastError();
if(iErr != 10035)
goto CLEAR;
// 检查socket描述符是否可写
if(select(0, NULL, &fd, NULL, &tv) <= 0)
goto CLEAR;
// 取错误标识
if(getsockopt(hSocket, SOL_SOCKET, SO_ERROR, (char*)&err, &len) != (SOCKET_SUCCESS))
goto CLEAR;
if(err != 0)
goto CLEAR;
// 设置为阻塞模式
ioctlsocket(hSocket, FIONBIO, &ul);
// 连接成功
return (SOCKET_SUCCESS);
CLEAR:
SetLastError(WSAGetLastError()); //超时
return (SOCKET_ERROR);