gpt4 book ai didi

c++ - 为什么我的套接字停止传输?

转载 作者:可可西里 更新时间:2023-11-01 02:45:33 25 4
gpt4 key购买 nike

好吧,让我说清楚。我正在使用 TCP,这应该意味着连接不应中断,除非关闭或由于网络问题。

所以这是我的问题:

使用我的套接字效果很好。

在静止 5 到 10 分钟后,它们停止响应(连接仍然存在 [使用 netstat -n 检查])。

它告诉我数据已发送(但另一端没有收到,我确定它正在等待。)

如果我继续发送,最终它会给我 WSA 错误 10038(无效的套接字句柄)。

在多次尝试发送后编辑,它给了我错误 10058(已建立的连接被主机中的软件中止。)

我完全糊涂了。除了不活动之外,我没有关闭套接字也没有对它做任何事情。如果我不停地使用它 10 到 20 分钟,它就可以完美运行。

最佳答案

对于错误 10058,几乎可以肯定网关(代理、防火墙或路由器,有或没有 NAT)正在超时它的连接中继。

基本上,您与同行没有直接联系。相反,网关介于两者之间,并明确地在它与你的连接和它与你的对等方的连接之间传输数据。由于套接字是一种有限的资源,因此网关有一个驱逐策略,它会关闭看似不活动的连接。如果你看起来死了,砰,你已经死了。

您唯一的选择是保持事件状态,这通常意味着在您的应用程序协议(protocol)中以某种“心跳”方式工作。讨厌,但他们的休息时间。

除非您真的知道自己在做什么,否则请不要玩弄 TCP 的 SO_KEEPALIVE。

关于c++ - 为什么我的套接字停止传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14044460/

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