python - 如何在等待接收数据时关闭阻塞套接字?

标签 python sockets networking

我有一个使用阻塞套接字接收数据的服务。我遇到的问题是,如果它仍在等待数据,我不知道如何正确关闭套接字。下面是我如何打开和等待数据的简短片段:我不想实现超时,因为根据 python 文档,套接字必须阻塞才能使用 makefile

由于我是套接字编程的新手,所以我可能完全错了。

编辑:

请注意,我无法更改服务器的运行方式。

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
reader = s.makefile("rb")
line = reader.readline()

最佳答案

有一个非常简单的解决方案。给定一个套接字和一个读取器文件对象,如 rfile = socket.makefile('rb'),为了使 rfile.readline() 在套接字关闭时立即返回,您需要在单独的线程中执行以下操作:

socket.shutdown(socket.SHUT_RDWR)
socket.close()

调用 socket.shutdown()将使 rfile.readline() 返回空的 strbytes,具体取决于 Python 的版本(分别为 2.x 或 3.x) ).

关于python - 如何在等待接收数据时关闭阻塞套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7572682/

相关文章:

python - 多处理中的 numpy.random 种子

php - 在 Web 服务器上处理长时间运行任务的最佳方式

对 memset 感到困惑

python - 操作系统错误 : [Errno 9] Bad file descriptor

python - 使用root,打开其他进程套接字并使用python获取tcp_info?

javascript - 来自一个外部 IP 地址的 WebSocket 客户端

python - 根据任何图像几何形状调整 GraphicView

python - 计算 Pandas 的牛市/熊市

c# - 不完整的消息(C# TCP/IP 客户端)

java - getByName() - 如何详细说明原因?