通常connect默认连接大概一分钟,容易卡死,下面的处理方法可以避免这一现象:
int error = -1, len;
len = sizeof(int);
timeval tm;
fd_set set;
unsigned long ul = 1;
ioctlsocket(serverSock, FIONBIO, &ul); //设置为非阻塞模式
BOOL ret = false;
if (connect(serverSock, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR)
{
tm.tv_sec = timeout;
tm.tv_usec = 0;
FD_ZERO(&set);
FD_SET(serverSock, &set);
if (select(serverSock+1, NULL, &set, NULL, &tm) > 0)
{
getsockopt(serverSock, SOL_SOCKET, SO_ERROR, (char*)&error, (int*)&len);
if (error == 0)
ret = TRUE;
else
ret = FALSE;
}
else
ret = FALSE;
}
else ret = TRUE;
ul = 0;
ioctlsocket(serverSock, FIONBIO, &ul); //设置为阻塞模式