gpt4 book ai didi

c - 在阻塞 recv 调用的情况下,如果对等方系统重新启动,则调用不会来自 out recv。为什么?

转载 作者:行者123 更新时间:2023-12-03 18:08:51 26 4
gpt4 key购买 nike

当我的代码处于阻塞的 recv 调用中时,如果另一端重新启动,那么这一端的 recv 调用不会知道它,只会进入挂起状态。

如何避免这种情况?

最佳答案

默认情况下,如果连接的另一端在没有正确终止连接的情况下消失,您这边的操作系统无法知道不会有更多数据到来。这就是为什么 recv() 在这种情况下会永远阻塞。

如果你想有一个超时,然后将套接字设置为非阻塞并使用 select() 等待它变得可读。 select() 允许您指定超时。

或者,您可以使用 setsockopt() 设置 SO_KEEPALIVE 套接字选项。这将启用 TCP“keepalives”的发送,这将允许您的一方检测到失效的连接。 (请注意,使用默认设置,可能需要很长时间才能检测到连接已断开)。

关于c - 在阻塞 recv 调用的情况下,如果对等方系统重新启动,则调用不会来自 out recv。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3599568/

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