2011-06-05 6 views

Respuesta

11

En caso de duda, check the source.

socket_sendall claramente se da por vencido una vez que send() devuelve -1, lo que hará (con errno de EAGAIN o EWOULDBLOCK) si lo llama en un socket no bloqueante sin llamar poll() o seleccionar(). (Y la función internal_select omite llamar a poll()/select() cuando el socket no está bloqueando.)

Así que yo diría que el autor de PyNet es correcto.

+0

no suena como un error desde el desarrollador de ese módulo no haber manejado '' EAGAIN' y EWOULDBLOCK'? estas apenas pueden considerarse condiciones excepcionales, yo. – PypeBros

5

sendall() no tiene sentido en el socket no bloqueante. Tiene que bloquear si no puede enviar todos los datos a la vez, de lo contrario no se llamaría "sendall".