【发布时间】:2016-02-15 15:48:58
【问题描述】:
我正在尝试编写一个基于 tcp 套接字的服务器。在我阅读的 python 文档中,关闭套接字上的 recv 应该会引发错误。但是当客户端关闭套接字时,服务器仍然可以在此套接字上recv 并获得空字符串。那么我是否可以假设,如果recv 在阻塞套接字上返回空字符串,则表明此连接中断或已关闭?
【问题讨论】:
我正在尝试编写一个基于 tcp 套接字的服务器。在我阅读的 python 文档中,关闭套接字上的 recv 应该会引发错误。但是当客户端关闭套接字时,服务器仍然可以在此套接字上recv 并获得空字符串。那么我是否可以假设,如果recv 在阻塞套接字上返回空字符串,则表明此连接中断或已关闭?
【问题讨论】:
您必须检查是否收到了来自客户端的数据。如果 data 变量为空,您可以假设没有连接,因为客户端已关闭套接字或它们之间出现问题。很好的例子在https://docs.python.org/2/library/socket.html#example 或者如果你使用python3:https://docs.python.org/3.5/library/socket.html#example
【讨论】:
您必须通过代码处理 IOError 异常。
except IOError as io_error:
if io_error.errno == <YOUR CODE>:
do something
见:https://docs.python.org/2/library/errno.html#module-errno 获取代码
【讨论】:
recv 然后在阻塞套接字上返回空字符串。
recv在这种情况下会崩溃,所以我现在有点困惑。