我在閱讀Tutorial on Network Programming with Python,在本文檔中,作者說「函數sendall()只能用於阻塞套接字。」Python socket.sendall()函數
但我沒有在Python文檔中看到任何這樣的條件,socket.sendall(string[, flags])。
PyNet的作者是對嗎?
我在閱讀Tutorial on Network Programming with Python,在本文檔中,作者說「函數sendall()只能用於阻塞套接字。」Python socket.sendall()函數
但我沒有在Python文檔中看到任何這樣的條件,socket.sendall(string[, flags])。
PyNet的作者是對嗎?
如有疑問,請撥打check the source。如果您在非調用poll()或select()的情況下在非阻塞套接字上調用它,send()將返回-1,它將執行此操作(與EAGAIN或EWOULDBLOCK的errno一起),則顯然放棄。 (並且internal_select
函數在套接字非阻塞時跳過調用poll()/ select()。)
所以我想說PyNet作者是正確的。
sendall()在無阻塞套接字上沒有意義。它不得不阻止一次發送所有數據,否則它不會被稱爲「sendall」。
這聽起來不像是該模塊的開發人員沒有處理'EAGAIN'和'EWOULDBLOCK'的錯誤嗎?這些很難被認爲是特殊的條件,恕我直言。 – PypeBros 2012-03-06 14:18:25