加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

什么是在linux中连接非阻塞套接字的正确方法

发布时间:2020-12-14 02:13:55 所属栏目:Linux 来源:网络整理
导读:我刚接触使用 Linux中的套接字进行编程,并且对于进行非阻塞连接的正确方法存有疑问. 我已经创建了一个套接字描述符,并为非阻塞IO设置了O_NONBLOCK.我调用connect,它返回EINPROGRESS,然后调用select,带有超时值. 如何判断connect()操作在超时之前需要多长时间
我刚接触使用 Linux中的套接字进行编程,并且对于进行非阻塞连接的正确方法存有疑问.

我已经创建了一个套接字描述符,并为非阻塞IO设置了O_NONBLOCK.我调用connect,它返回EINPROGRESS,然后调用select,带有超时值.

如何判断connect()操作在超时之前需要多长时间?我可以在程序中更改此内容吗?

如果我的选择操作超时,那么呢?关闭套接字描述符,创建另一个,然后重试连接是正常的吗?或者,有没有办法取消现有套接字上的连接并使用相同的套接字描述符重试该操作?

谢谢.

解决方法

How can I tell how long the connect() operation will take before it times out?

你没有.您必须提前决定合理的超时将满足您的需求,然后将该值传递给select().我通常使用5到30秒之间的任何时间,具体取决于我运行的应用程序的网络类型.

Can I change this in my program?

最终,没有.操作系统控制等待连接超时的时间.您可以调整特定于操作系统的设置来控制超时,但这不是可移植的或推荐的.

If my select operation does time out,what then?

你唯一能做的就是关闭套接字然后再试一次.

Is it normal to close the socket descriptor,create another one,and then retry the connect?

是.

Or,is there a way to cancel the connect on the existing socket and retry the operation using the same socket descriptor?

没有.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读