繁体   English   中英

如何检查连接到C TCP服务器套接字的python TCP客户端套接字的状态?

[英]How to check the state of python TCP client socket connected to C TCP server socket?

我在 C 中运行 tcp 服务器,在 python 中运行 tcp 客户端。 两者都运行在不同的硬件上。 让我们将硬件 A 视为服务器,将硬件 B 视为客户端。 如果我优雅地退出硬件 A 中的执行,它将向客户端(硬件 B)发送一个空包,以便客户端知道连接已断开。 但是我没有直接退出,而是直接关闭硬件 A。现在客户端(硬件 B)不会收到连接断开的空包通知。 如何处理这种情况? 当硬件 A 断电时,客户端如何知道断开连接?

如果 TCP 连接空闲,客户端在很长一段时间内都不会知道(也许永远不会)。

如果客户端试图向服务器发送任何数据,那么当服务器断电时,客户端的 TCP 数据包将停止被服务器确认; 客户端的 TCP 堆栈将尝试重新发送数据包几次,但在几分钟内它会放弃并单方面关闭 TCP 套接字。 此时套接字将 select() 准备好读取,并且对套接字的下一次调用 read() 将返回 0 表示连接已关闭。

因此,如果您想优雅地处理这种情况,要做的就是定期在套接字上发送一些虚拟数据(即,如果服务器接收到这些数据,它将简单地忽略)。 这足以确保客户端的本地 TCP 堆栈检测并处理问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM