在sock.shutdown(SHUT_WR)之后检查插座是否关闭?

时间:2014-04-22 07:10:29

标签: python sockets tcp

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

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

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

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

这可能吗?

1 个答案:

答案 0 :(得分:2)

  

根据我对python套接字的理解,有一个读端和一个写端。

没有。套接字是全双工,双向,读/写,......

  

我也明白你可以关闭套接字的一半(在某些系统上)。

您可以关闭阅读或写作。

  

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

您可以通过发送内容等来检查连接

  

我想知道是否有办法可靠地"检查服务器是否已关闭" read"套接字的结束,在客户端关闭其后#34;写"套接字的结尾。

如果您是服务器,则不需要检查,因为您是关闭服务器的人。如果您是客户,则无法发送任何内容,因此您无法检查。

  

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

sock.shutdown(socket.SHUT_WR)
     

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

判断您是否仍然可以从套接字读取的唯一方法是尝试从套接字读取。如果对等方已关闭套接字,或半封闭它以进行发送,您将收到流的结束,但是以您的语言显示。这不是你上面提到的问题:你在询问服务器同伴关闭其套接字以供阅读。