2

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

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

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

该脚本应该可以在 OSX 和 linux 上运行,所以 epoll 已经退出了。

有什么建议么?

我可以补充一点,我不在乎发生了什么错误,只是任何错误都会发生。

4

2 回答 2

1

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

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

您应该删除有关协议的更多详细信息,客户端是否仅出于发送文件的目的而打开 TCP 套接字?如果传输完成,它会关闭套接字吗?

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

于 2011-07-06T00:56:38.627 回答
0

事实证明,我需要做的就是将套接字超时设置为较低的值,比如 1 分钟,recv 调用将在 1 分钟后抛出异常。

于 2011-07-06T19:54:46.793 回答