检查sock.shutdown(SHUT_WR)后套接字是否关闭?
根据我对Python中socket的理解,socket有两个部分,一个是用来读取数据的,另一个是用来写入数据的。我还知道,在某些系统上,你可以关闭socket的一半。此外,你可以通过发送数据并检查是否出现异常,来判断一个socket是否已经关闭。
我想知道有没有一种方法,可以“可靠地”检查在客户端关闭了它的“写”端之后,服务器是否关闭了它的“读”端。
举个例子,如果服务器正在运行,而这是客户端的代码:
sock.shutdown(socket.SHUT_WR)
#I want to check if I can still read from the socket at this point in code.
这样做可能吗?
1 个回答
2
根据我对Python套接字的理解,它有一个读端和一个写端。
不对,套接字是双向的,可以同时读和写。
我还知道在某些系统上,你可以关闭套接字的一半。
你可以选择关闭读端或者写端。
此外,你可以在Python中通过发送数据并检查是否有异常来判断一个套接字是否已经关闭。
你可以通过发送数据等方式检查一个连接是否被对方关闭了。
我想知道有没有办法“可靠地”检查一个服务器在客户端关闭了它的“写”端之后,是否关闭了“读”端。
如果你是服务器,那你不需要检查,因为你自己已经关闭了。如果你是客户端,你无法发送任何数据,所以也无法检查。
例如,如果有一个服务器在运行,而这是客户端的代码:
sock.shutdown(socket.SHUT_WR)
我想在这段代码中检查我是否还能从套接字读取数据。
判断你是否还能从套接字读取数据的唯一方法就是尝试去读取。如果对方关闭了套接字,或者只关闭了发送端,你会收到一个流结束的信号,具体表现形式取决于你使用的编程语言。不过,这并不是你之前问的内容:你问的是服务器对读取端的关闭情况。