检查sock.shutdown(SHUT_WR)后套接字是否关闭?

0 投票
1 回答
2777 浏览
提问于 2025-04-18 03:42

根据我对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)

我想在这段代码中检查我是否还能从套接字读取数据。

判断你是否还能从套接字读取数据的唯一方法就是尝试去读取。如果对方关闭了套接字,或者只关闭了发送端,你会收到一个流结束的信号,具体表现形式取决于你使用的编程语言。不过,这并不是你之前问的内容:你问的是服务器对读取端的关闭情况。

撰写回答