gpt4 book ai didi

linux - TCP 套接字连接因 SO_REUSEADDR 而变得不可靠

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:08 25 4
gpt4 key购买 nike

我有一个应用程序,其中单个客户端与单个服务器通信。通常情况下,客户端只做一次connect,然后重复调用send,就没有问题。

但是,我需要做一个客户端为每个单独的 send 建立连接的版本(有点像带和不带 keep-alive 的 HTTP)。在这个版本中,客户端调用socketconnectsend一次,然后close

问题是我很快就用完了临时客户端端口,connect 失败了。为了解决这个问题,我使用 SO_REUSEADDR 调用了 setsockopt,然后在调用 connect 之前绑定(bind)到端口 0(例如,参见 here) .

这有效,除了 TCP 连接不再可靠。我偶尔会收到不正确的数据,大概是因为当 TCP 连接关闭时仍然有数据存在。

有什么方法可以使它可靠(且快速)?在 close 之前 shutdown 没有帮助。也许我可以让 select 告诉我套接字是否准备好输出,但这似乎有点过分了。

最佳答案

你必须使用 TCP 吗?如果是这样,您可能必须保持一个开放的连接并通过该连接路由您的消息。

SCTP ,这可能非常适合您的用例 - 可靠的数据报协议(protocol):

Like TCP, SCTP provides reliable, connection oriented data delivery with congestion control. Unlike TCP, SCTP also provides message bound‐ ary preservation, ordered and unordered message delivery, multi-stream‐ ing and multi-homing. Detection of data corruption, loss of data and duplication of data is achieved by using checksums and sequence numbers. A selective retransmission mechanism is applied to correct loss or corruption of data.

关于linux - TCP 套接字连接因 SO_REUSEADDR 而变得不可靠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44051299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com