防止connect时卡死

防止connect时卡死

通常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);  //设置为阻塞模式

你可能感兴趣的:(防止connect时卡死)