從測試中,我得出結論,在以下三種情況下,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