x-zone

all about c++
<2007年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

统计

  • 随笔 - 1
  • 文章 - 3
  • 评论 - 0
  • 引用 - 0

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

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

posted on 2007-10-26 14:02 刘旭 阅读(900) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理