c - 连接超时在 select() 调用的上下文中意味着什么

标签 c select tcp

我注意到有时 select 返回时在 errno 上设置了连接超时,但我不知道它为什么会这样做,它怎么知道的?你打算如何处理这个问题? (我猜这意味着其中一个连接超时,也许在适当的时间没有收到 ACK)。我想唯一合法的情况是如果服务器套接字在那里并且您之前运行过非阻塞连接?在这种情况下,再次在此套接字上运行连接将返回给您它是否已连接,这就是处理该问题的方法....但是有更好的方法吗?

提前致谢。

最佳答案

正如上面的评论者所说,这可能是 select() 在非阻塞 connect() 上的结果。除非这是一般的超时,在这种情况下,传入的已接受的 TCP 套接字有时也会发生这种情况。无论哪种方式,下面都是两个非常有用的指南,可以帮助您重温 select() 的用法:

http://www.lowtek.com/sockets/select.html

http://beej.us/guide/bgnet/output/html/multipage/advanced.html#select

http://beej.us/guide/bgnet/output/html/multipage/advanced.html#blocking

另请参阅此问题以获取 Python 示例:

How can I get non-blocking socket connect()'s?

干杯。

关于c - 连接超时在 select() 调用的上下文中意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356996/

相关文章:

c - 是否可以使用目录流重命名 C 中的文件?

mysql - 选择填充数据的列中的所有唯一电子邮件

sql - 查询中的 Oracle 字符串比较

sockets - 连接到外部 SSL TCP 套接字到底是什么意思?

ios - 在 Swift 中通过 TCP 发送消息(NULL 终止)

c - 调试 C 中的字符串替换函数

c - curses.h 中空格键的关键代码是什么

c - 如何获取整数作为字符串

css - 为什么 Bootstrap 表单选择控件看起来有点奇怪?

c# - 流不可写异常的可能原因有哪些?