本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9709041
建立时间:2004年12月20日




[c++]connect函数的错误处理 
原创空间,  软件技术,  电脑与网络

邢红瑞 发表于 2007/10/15 18:36:55

这是一个tcp连接的简单问题,但是做起来还是蛮复杂的。首先 返回-1,不是错误,这里主要是错误10035的处理,无法立即完成一个非阻挡性套接字操作(WSAEWOULDBLOCK)。主要因为连接的对方是非阻塞套接字,此时进行数据的send 和reconnect都是错误的。一般使用select来判断socket句柄的可写性,而不是注册事件。如果连接没有完成,select会等待真正的完成,而真正完成时要么是个合法的连接,则select成功,要么非法,则select失败,select只有3种可能,0 超时 -1 错误 或者是socket的个数。 nRet = connect(s, name, namelen);    char a[10];      DWORD dwErrorCode = WSAGetLastError();  if(nRet && (WSAEWOULDBLOCK == dwErrorCode))  {   timeval tv;   fd_set read_set;            tv.tv_sec = 18;  // 超时限制为18秒             tv.tv_usec = 0;     FD_ZERO(&read_set);    // read_set    FD_SET(s, &read_set);  // 将s放入集合read_set中    // 用select() 处理结果    switch(select(s + 1, NULL, &read_set, NULL, &tv))    {    case -1:     {       bSendProxyData = FALSE;     DWORD dwErrorCode = WSAGetLastError();         }         // sock超时处理    case 0:       {     // max --;     // closesocket(s);                }        default:       }                   }                   return 0;//告诉后面程序连接成功。得到的教训是好好看msdn,不要瞎看别的书。


阅读全文(4383) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144768096 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号