为什么在 socket.recv() 之后永远不会到达 break 语句

Why does the break statement never be reached after socket.recv()

我写了下面的代码来接收数据,然后把数据写到一个文件中。

我的问题是: 我发现 if 分支 (" if not data: break ") 永远不会被执行, 1).为什么永远不会到达 if 分支? 2).我的代码如何退出 while 循环?

s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/var/run/output.socket")

while True:
    data = s.recv(1024)
    if not data:
        break
    else:
        f = open("/home/ematt/test.log",'a')
        f.write(data)

socket.recv 总是有数据。它会等到一些数据到达。

https://docs.python.org/2/library/socket.html

socket.recv是一个阻塞调用,它returns当数据已经接收到(或者对端已经关闭连接)

如果您想避免等待数据到达,您可以使用

将套接字设置为non-blocking mode
s.setblocking(False)

在这种模式下,recv在没有可用数据时抛出异常。 请参阅 this SO QA 了解更多信息和如何使用它的代码示例