我有一个Python TCP服务器,每个连接都有一个线程进行监听。当我在连接对象上调用`close`时,会抛出“bad file descriptor”异常。通过谷歌搜索,我发现了一些解决方案,每个解决方案都使用循环接收客户端数据并在决定断开客户端时中断该循环。我的客户端是用C#编写的,并且不知道它已经从Python服务器“断开”连接,Python只是忽略来自C#客户端的传入数据。在Python服务端断开TCP连接的合法最佳实践方式是什么?
提前感谢您。
提前感谢您。
根据官方文档:
注意:close() 释放与连接相关联的资源,但不一定立即关闭连接。如果要及时关闭连接,请在 close()之前调用 shutdown()。
因此,在调用close()之前应该调用shutdown()。另外,您还应该传递SHUT_RDWR标志以完全关闭连接:
from socket import SHUT_RDWR
...
try:
s.shutdown(SHUT_RDWR)
s.close()
except Exception:
pass