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

时间:2016-01-07 09:43:45

标签: python python-sockets

我编写以下代码来接收数据,然后将数据写入文件。

我的问题是:      我发现if分支("如果不是数据: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)

2 个答案:

答案 0 :(得分:0)

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

请参阅https://docs.python.org/2/library/socket.html

答案 1 :(得分:0)

socket.recv是一个阻塞调用,它在收到数据时返回(或者对等方已关闭连接)

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

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

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