从测试中,我得出结论,在以下三种情况下,socket.recv(recv_size)
将返回。什么时候socket.recv(recv_size)返回?
连接关闭后。例如,客户端端 调用socket.close()或发生任何套接字错误,它将返回 空字符串。
有些数据来了,数据的大小大于
recv_size
。- 有些数据来了,数据的大小小于
recv_size
,短时间内没有更多的数据(我发现0.1s会工作)。
更多关于#3的细节:
#server.py
while True:
data = sock.recv(10)
print data, 'EOF'
#client1.py
sock.sendall("12345")
sock.sendall("a" * 50)
#client2.py
sock.sendall("12345")
time.sleep(0.1)
sock.sendall("a" * 50)
当我运行client1.py
,在server.py
回声:
12345aaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaa EOF
当我运行client2.py
的server.py
回声:
12345 EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
我的结论是否正确?我在哪里可以看到有关#3的官方说明?
http://docs.python.org/library/socket.html#socket.socket.recv – mouad
谢谢,但手册没有回答我的问题。 – redice
这里怎么样:http://linux.die.net/man/2/recv – mouad