Python socket.sendall () функция - PullRequest
       1

Python socket.sendall () функция

13 голосов
/ 05 июня 2011

Я читаю Учебник по сетевому программированию на Python , и в этом документе автор говорит, что «функция sendall () должна использоваться только с блокирующими сокетами».

Но я не вижу таких условий в документации Python, socket.sendall (string [, flags]) .

Прав ли автор PyNet?

Ответы [ 2 ]

11 голосов
/ 05 июня 2011

Если сомневаетесь, проверьте источник .

socket_sendall явно сдается, когда send () возвращает -1, что он и сделает (с ошибкой EAGAIN или EWOULDBLOCK), еслиВы вызываете его в неблокирующем сокете без вызова poll () или select ().(И функция internal_select пропускает вызов poll () / select (), когда сокет не блокируется.)

Так что я бы сказал, что автор PyNet верен.

5 голосов
/ 05 июня 2011

sendall () не имеет смысла для неблокирующего сокета.Он должен блокировать, если не может отправить все данные одновременно, иначе он не будет называться «sendall».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...