2024-05-23 14:58:18 发布
网友
我正在阅读Tutorial on Network Programming with Python,在本文中,作者说“sendall()函数应该只与阻塞套接字一起使用。”
但是我在Python文档中没有看到任何这样的情况,socket.sendall(string[, flags])。
PyNet的作者是对的吗?
sendall()在非阻塞套接字上没有意义。如果不能一次发送所有数据,它必须阻塞,否则就不会被称为“send all”。
有疑问时,check the source。
socket_sendall显然,一旦send()返回-1,它就会放弃,如果您在非阻塞套接字上调用它而不调用poll()或select(),它就会这样做(使用EAGAIN或EWOULDBLOCK的errno)。(当套接字不阻塞时,internal_select函数跳过调用poll()/select()。)
socket_sendall
internal_select
所以我认为PyNet的作者是正确的。
sendall()在非阻塞套接字上没有意义。如果不能一次发送所有数据,它必须阻塞,否则就不会被称为“send all”。
有疑问时,check the source。
socket_sendall
显然,一旦send()返回-1,它就会放弃,如果您在非阻塞套接字上调用它而不调用poll()或select(),它就会这样做(使用EAGAIN或EWOULDBLOCK的errno)。(当套接字不阻塞时,internal_select
函数跳过调用poll()/select()。)所以我认为PyNet的作者是正确的。
相关问题 更多 >
编程相关推荐