Skip to main content
 首页 » 编程设计

python之检测 python 中套接字的正常关闭

2025年05月04日10yyy_WW

我正在尝试确定服务器套接字是否在 python 中正常关闭。

程序接收文件,如果在发送过程中出现错误,则应删除文件。

我知道您的第一个建议是让客户端发送文件的长度或一些终止数据,让服务器知道文件传输已完成。
可悲的是,我无法更改客户端,它只是通过原始 tcp 转储文件,我对此无能为力。所以请不要说“但如果你能改变它”或“你的协议(protocol)有缺陷”,我没有写协议(protocol),我将不得不处理它。

脚本应该在 OSX 和 linux 上都可以工作,所以 epoll 已经过时了。

有什么建议吗?

我可以补充一点,我不关心发生了什么错误,只关心发生了什么错误。

请您参考如下方法:

如果另一端已经完成发送数据,他们应该关闭(2)写套接字。然后在您的多路复用循环中,您将能够检查套接字是否已关闭以进行写入或刚刚被远程端关闭(写入和读取)。这是正常关闭,您可以使用 select/poll/kqueue 或其他任何方式。

如果客户端不这样做,不发送终止字符并且不发送长度或校验和,它看起来很难。

您应该放弃有关协议(protocol)的更多细节,客户端打开 TCP 套接字是否只是为了发送文件?如果传输完成,它会关闭套接字吗?

在最坏的情况下,您将不得不检查文件的完整性,如果您知道其格式,则可以尝试在运行时检查它或让 cron 选项卡进行清理。如果不能,那么将很难找到解决方案。祝你好运...