【问题标题】:Check if a socket is closed after sock.shutdown(SHUT_WR)?在 sock.shutdown(SHUT_WR) 之后检查套接字是否关闭?
【发布时间】:2014-04-22 07:10:28
【问题描述】:

根据我对python socket的理解,有读端和写端。我也知道您可以关闭一半的套接字(在某些系统上)。此外,您可以通过发送某些内容并检查异常来检查套接字是否已关闭。

我想知道是否有一种方法可以“可靠地”检查服务器是否关闭了套接字的“读取”端,在客户端关闭其“写入”端之后。

例如,如果服务器正在运行,这是客户端代码:

sock.shutdown(socket.SHUT_WR)
#I want to check if I can still read from the socket at this point in code.

这可能吗?

【问题讨论】:

标签: python sockets tcp


【解决方案1】:

根据我对python socket的理解,有读端和写端。

没有。套接字是全双工的、双向的、读/写的……

我也了解您可以关闭一半的套接字(在某些系统上)。

您可以关闭阅读或写作。

此外,您可以在 python 中通过发送某些内容并检查异常来检查套接字是否已关闭。

您可以通过发送某些东西等检查连接是否关闭对等

我想知道是否有一种方法可以“可靠地”检查服务器是否关闭了套接字的“读取”端,在客户端关闭其“写入”端之后。

如果您是服务器,则无需检查,因为您是完成关闭的人。如果你是客户,你不能发送任何东西,所以你不能检查。

例如,如果服务器正在运行,这是客户端代码:

sock.shutdown(socket.SHUT_WR)

我想检查在代码中此时我是否仍然可以从套接字读取。

判断您是否仍然可以从套接字读取的唯一方法是尝试从套接字读取。如果对等方已关闭套接字,或将其半关闭以进行发送,您将获得流结束,但这会以您的语言表现出来。这不是您在上面询问的内容:您在询问服务器对等方关闭其套接字以进行读取。

【讨论】:

  • 感谢您的帮助。但是,如何在 Python 中判断流是否结束?
  • 我相信recv()会返回一个空字符串,但请自己检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多