Из теста я пришел к выводу, что в следующих трех случаях возвращается 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
echos:
12345aaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaa EOF
Когда я запускаю client2.py
, server.py
echos:
12345 EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
aaaaaaaaaa EOF
Правильно ли мои выводы? Где я могу увидеть официальное описание о # 3?