【发布时间】:2011-10-04 21:16:07
【问题描述】:
我希望我的 Winsock TCP connect() 调用以无限超时阻塞。
问题: 1. 我该怎么做?
- 从功能的角度来看,我上述的愿望正是我所需要的。从技术角度来看,这是否是个坏主意?
谢谢你, 戴夫
【问题讨论】:
我希望我的 Winsock TCP connect() 调用以无限超时阻塞。
问题: 1. 我该怎么做?
谢谢你, 戴夫
【问题讨论】:
如果您想永远等待,只需在 connect 超时时重试即可。
超时对于 TCP 的工作方式非常重要。您可以调整机器的设置(例如:Which is the default TCP connect timeout in Windows?),但这不是一个好主意(影响所有 TCP 连接)。
【讨论】:
回答你问题的第二部分:
从功能的角度来看,我上面所说的愿望正是 我需要。从技术角度来看有什么理由吗? 一个坏主意?
您只能通过写入来检测断开的 TCP 连接与未向您发送任何内容的连接之间的区别(请参阅this answer)。什么都不读可能意味着连接断开或没有任何东西发送给您。超时可用于检测(或强制)此类断开连接,从而释放资源。 (您也可以使用 TCP Keep-alive 来检测断开连接,但效果与超时非常相似。)
如果您计划使用的协议从您想要禁用超时的一侧定期写入,这对您来说可能无关紧要,否则,您最终可能会遇到您期待某些事情发生的情况永远从另一端(因为它可能突然断开连接)。
【讨论】: