我不熟悉在Linux中使用套接字进行编程,并对正确执行非阻塞连接的方法有疑问。
我创build了一个套接字描述符,并为非阻塞IO设置O_NONBLOCK。 我调用connect,它返回EINPROGRESS,然后我调用select,超时值。
如何判断connect()操作在超时之前需要多长时间? 我可以在我的程序中更改这个吗?
如果我的select操作超时,那么呢? closures套接字描述符,创build另一个套接字,然后重试连接是否正常? 或者,有没有办法取消现有套接字上的连接,并重试使用相同套接字描述符的操作?
应用程序间的通信
Android LocalServerSocket
UDP在不同的线程中发送和接收
如何使用命令行build立套接字连接
Linux,了解setsockopt()PACKET_FANOUTnetworking缩放
谢谢。
什么是套接字组? (视窗)
在winsock中的FD_CLOSE事件
在socket.close被调用之后,socket.read_some需要一段时间才能返回
如何判断connect()操作在超时之前需要多长时间?
你没有。 你必须提前决定一个合理的超时是否会满足你的需求,然后把这个值传给select() 。 我通常使用5-30秒之间的任何地方,这取决于我的应用程序运行的网络类型。
我可以在我的程序中更改这个吗?
最终,没有。 操作系统控制等待连接超时的时间。 您可以调整操作系统特定的设置来管理该超时,但这不是可移植的或推荐的。
如果我的选择操作超时,那么呢?
是。
或者,有没有办法取消现有套接字上的连接,并重试使用相同套接字描述符的操作?
没有。
连接完成后,套接字FD将变为可写。 你也应该通过getsockopt()来检查套接字的最后一个错误。
如何判断connect()操作在超时之前需要多长时间?
你当然不能。 你必须尝试一下。 这个问题没有意义。
我可以在我的程序中更改这个吗?
你可以改变选择超时,如果这就是你的意思。 如果不是,我不明白这个问题。 请注意,您可以通过这种方式减少约一分钟的平台默认连接超时,但不能增加它。
如果我的选择操作超时,那么呢?
只有当你有理由相信下一次你会得到不同的结果。
或者,有没有办法取消现有套接字上的连接,并重试使用相同套接字描述符的操作?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。