为什么在 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 总是有数据。它会等到一些数据到达。
socket.recv是一个阻塞调用,它returns当数据已经接收到(或者对端已经关闭连接)
如果您想避免等待数据到达,您可以使用
将套接字设置为non-blocking mode
s.setblocking(False)
在这种模式下,recv
在没有可用数据时抛出异常。
请参阅 this SO QA 了解更多信息和如何使用它的代码示例
我写了下面的代码来接收数据,然后把数据写到一个文件中。
我的问题是: 我发现 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 总是有数据。它会等到一些数据到达。
socket.recv是一个阻塞调用,它returns当数据已经接收到(或者对端已经关闭连接)
如果您想避免等待数据到达,您可以使用
将套接字设置为non-blocking modes.setblocking(False)
在这种模式下,recv
在没有可用数据时抛出异常。
请参阅 this SO QA 了解更多信息和如何使用它的代码示例