【发布时间】:2011-02-28 08:50:36
【问题描述】:
TCP 标准具有“同时打开”功能。
该功能的含义,客户端尝试连接到本地端口,当端口来自ephemeral range时,偶尔可以连接到自己(参见here)。
所以客户端认为它连接到服务器,而它实际上连接到自己。另一方面,服务器无法打开其服务器端口,因为它被客户端占用/窃取。
我正在使用 RHEL 5.3,我的客户不断尝试连接到本地服务器。 最终客户端连接到自己。
我想阻止这种情况。我看到了两种可能的解决方案:
- 不要将临时端口用于服务器端口。 同意临时端口范围并在您的机器上进行配置(请参阅ephemeral range)
- 检查 connect() 有人提议here。
你怎么看? 你如何处理这个问题?
附注1
除了我显然在寻找的解决方案, 我希望你能分享你在这个问题上的真实经历。
当我找到问题的原因时,我对自己不熟悉的工作场所感到“惊讶”。通过定期连接来轮询服务器是恕我直言的常见做法, 所以这个问题是如何不为人知的。
【问题讨论】:
-
我认为这个问题需要澄清。这是我对它的理解: - 您有一个服务器在临时范围内的(非保留)端口上运行。例如,端口 56789。 - 本地计算机上的客户端通过连接到“localhost:56789”来轮询服务器。 - 如果服务器已关闭,则出站端口也可能选择为 56789。我理解正确吗?在这种情况下 connect 调用的结果是什么?
-
你理解正确。我已经编辑了问题以使其更清楚。
标签: c++ networking tcp