温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

einprogress错误码的解决方法

发布时间:2021-03-04 15:47:45 来源:亿速云 阅读:1014 作者:小新 栏目:开发技术

这篇文章主要介绍einprogress错误码的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

  Linux非阻塞connect,错误码:EINPROGRESS,EINPROGRESS115/*Operationnowinprogress*/,这是正确的。和windows不同的是,这里显示EINPROGRESS,windows应该是EWOULDBLOCK。感觉linux的这种表述更准确一些,确实是EINPROGRESS(正在处理),而EWOULDBLOCK应该是在网卡或者系统繁忙、无法及时处理数据。

  EINPROGRESS怎么弄

  当我们以非阻塞的方式来进行连接的时候,返回的结果如果是-1,这并不代表这次连接发生了错误,如果它的返回结果是EINPROGRESS,那么就代表连接还在进行中。后面可以通过poll或者select来判断socket是否可写,如果可以写,说明连接完成了

  无阻塞情况connect生产EINPROGRESS错

  今天的游戏开发client测试程序,非常多,因为出现client。后connect成功。代码证recv系统调用。后来发现,可能是由于socket默认模式被阻止,这将使很多client

  接处于链接却不能数据传输状态。

  后来改动socket为非堵塞模式,但在connect的时候,发现返回值为-1,刚開始以为是connect出现错误,但在server上看到了链接是ESTABLISED状态。

  证明链接是成功的

  但为什么会出现返回值是-1呢?经过查询资料,以及看stevens的APUE,也发现有这么一说。

  当connect在非堵塞模式下,会出现返回-1值。错误码是EINPROGRESS,但怎样推断connect是联通的呢?stevens书中说明要在connect后,继续推断该socket是否可写?

  若可写,则证明链接成功。怎样推断可写,有2种方案,一种是select推断是否可写,二用poll模型。

  select:

  intCheckConnect(intiSocket)

  {

  fd_setrset;

  FD_ZERO(&rset);

  FD_SET(iSocket,&rset);

  timevaltm;

  tm.tv_sec=0;

  tm.tv_usec=0;

  if(select(iSocket+1,NULL,&rset,NULL,&tval)<=0)

  {

  close(iSocket);

  return-1;

  }

  if(FD_ISSET(iSocket,&rset))

以上是“einprogress错误码的解决方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI