【发布时间】:2020-08-20 05:07:29
【问题描述】:
我在网上看到很多关于 socket recv() 的例子都遵循这种格式:
来自here 的示例。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 50000))
s.listen(1)
conn, addr = s.accept()
while 1:
data = conn.recv(1024)
if not data:
break
这里的代码并没有将socket设置为非阻塞;它也没有设置超时。我的理解是recv() 默认是阻塞的。如果是这样,代码如何到达break,因为如果没有数据,那么它会停留在recv()?
编辑:处理“没有更多数据”的正确方法是什么?是将套接字设置为超时还是非阻塞;还是有其他方法?
【问题讨论】: