微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我不熟悉在Linux中使用套接字进行编程,并对正确执行非阻塞连接的方法有疑问。

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

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

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

应用程序间的通信

Android LocalServerSocket

UDP在不同的线程中发送和接收

如何使用命令行build立套接字连接

Linux,了解setsockopt()PACKET_FANOUTnetworking缩放

谢谢。

什么是套接字组? (视窗)

在winsock中的FD_CLOSE事件

TCP套接字从错误的端口接收

套接错误无法在WinSock2.h中获取函数

在socket.close被调用之后,socket.read_some需要一段时间才能返回

如何判断connect()操作在超时之前需要多长时间?

你没有。 你必须提前决定一个合理的超时是否会满足你的需求,然后把这个值传给select() 。 我通常使用5-30秒之间的任何地方,这取决于我的应用程序运行的网络类型。

我可以在我的程序中更改这个吗?

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

如果我的选择操作超时,那么呢?

唯一可以做的就是关闭套接字并重试。

关闭套接字描述符,创建另一个套接字,然后重试连接是否正常?

是。

或者,有没有办法取消现有套接字上的连接,并重试使用相同套接字描述符的操作?

没有。

连接完成后,套接字FD将变为可写。 你也应该通过getsockopt()来检查套接字的最后一个错误

如何判断connect()操作在超时之前需要多长时间?

你当然不能。 你必须尝试一下。 这个问题没有意义。

我可以在我的程序中更改这个吗?

你可以改变选择超时,如果这就是你的意思。 如果不是,我不明白这个问题。 请注意,您可以通过这种方式减少约一分钟的平台认连接超时,但不能增加它。

如果我的选择操作超时,那么呢?

关闭套接字并执行任何应用程序对连接超时的要求。

关闭套接字描述符,创建另一个套接字,然后重试连接是否正常?

只有当你有理由相信下一次你会得到不同的结果。

或者,有没有办法取消现有套接字上的连接,并重试使用相同套接字描述符的操作?

不。一旦连接失败,套接字已经死了,必须关闭

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐