如何在Python中检查套接字的数据缓冲区是否为空?

3 投票
2 回答
8769 浏览
提问于 2025-04-18 18:07

我想在调用 socket.recv(bufsize[, flags]) 之前,检查一下套接字的数据缓冲区是不是空的。有没有什么方法可以做到这一点?

2 个回答

8

你可以先看一下(不是真的去使用这些数据):

data = conn.recv(bufsize, socket.MSG_PEEK)
3

你可能想把你的套接字设置为非阻塞模式:

socket.setblocking(0)

在你调用这个设置之后,如果你尝试从一个没有数据的套接字读取信息,它不会让你一直等下去,而是会抛出一个异常。想了解更多,可以查看socket.setblocking(flag)的详细说明。


如果你想要更高级的用法,可以看看select。像这样的代码:

r, _, _ = select([socket],[],[],0)
#                               ^
#           Timeout of 0 to poll (and not block)

它会告诉你你的套接字中是否有数据可以读取

撰写回答