回答
顯然你是使用非阻塞套接字,你需要使用select()
或poll()
以確定何時可以寫(連接是寫的一種形式)的插座。當您希望將數據寫入連接的套接字時,情況也是如此;當你感覺喜歡它時,你不僅要寫和連接,還要讓套接字告訴你什麼時候可以做事,同時你還做了其他事情(異步套接字操作的想法)。
檢查您的聯機幫助有關可用錯誤代碼的絕對真理:
$ man connect
[EINPROGRESS]套接字是非阻塞,連接無法立即完成。可以通過選擇用於寫入的套接字來選擇(2)以完成。
你有一個非阻塞的插座,你打電話給它connect()
。由於connect()
需要發生三次握手(所以是網絡往返),它會阻止在阻塞套接字中等待SYN-ACK,或者給您一些指示,說明它尚未在非阻塞套接字中成功。通常情況下,非阻塞套接字會返回EAGAIN/EWOULDBLOCK,告訴您它們無法進步,您應該再試一次:這不完全是您的情況,connect()
返回EAGAIN/EWOULDBLOCK,因爲沒有免費的臨時端口來告訴您應該稍後再試;所以對於非阻塞連接還有一個錯誤:EINPROGRESS,它告訴你該操作正在進行,你應該稍後檢查它的狀態。
以後要檢查狀態,套接字將成爲準備好可寫,所以你可以使用select()
/poll()/...
測試爲,在這之後,你必須getsockopt(...SO_ERROR...)
讓你連接的成功/失敗狀態()操作。
現在我只在EAGAIN/EWOULDBLOCK中發生非阻塞錯誤,所以在非阻塞時,如果必須做EINPROGRESS錯誤和EAGAIN/EWOULDBLOCK錯誤一起選擇 – Syedsma
@Syedsma:only connect( )返回EINPROGRESS。 – ninjalj
只是想知道,如果選擇返回true(例如選擇寫),連接成功,但最後設置的errno是EINPROGRESS。在這種情況下應該忽略這個錯誤? – Bionix1441
我試圖連接到一個無效的本地IP地址(即不正確的子網),當這個錯誤,糾正主機固定問題
- 1. DataCacheClients錯誤,可能是什麼原因?
- 2. JS中類型錯誤的可能原因是什麼?
- 3. 什麼可能是錯誤的原因「ReferenceError:Velocity is not defined」?
- 4. 「Class DOMImplementation」找不到「錯誤」的可能原因是什麼?
- 5. 段錯誤代碼的可能原因是什麼
- 6. HTTPS站點上cURL錯誤60的可能原因是什麼?
- 7. 錯誤「操作超時」的可能原因是什麼?
- 8. 捲曲錯誤35,可能的原因是什麼?
- 9. 什麼可能是此錯誤消息的原因?
- 10. 爲什麼縮進的錯誤原因是錯誤的功能?
- 11. JasperException的可能原因是什麼
- 12. 可能是以下錯誤的原因
- 13. fsockopen()錯誤的原因是什麼?
- 14. 這是什麼錯誤的原因:
- 15. 什麼是以下錯誤的原因
- 16. 以下錯誤的原因是什麼?
- 17. ORA-00054錯誤的原因是什麼?
- 18. 這是什麼錯誤的原因
- 19. Valgrind錯誤的原因是什麼?
- 20. 這個錯誤的原因是什麼?
- 21. 錯誤「RESOURCE_EXHAUSTED」的原因是什麼?
- 22. 以下錯誤的原因是什麼?
- 23. 錯誤'Out of memory'是什麼原因?
- 24. 在Solaris C++編譯器中導致「ccfe中的致命錯誤」編譯錯誤的原因是什麼?
- 25. 在Objective-C中可能導致此錯誤的原因是什麼?
- 26. 在ASP.NET中可能導致這種零星錯誤的原因是什麼?
- 27. JMeter報告的套接字錯誤的原因可能是什麼
- 28. 什麼錯誤C2274的原因是什麼?
- 29. 「BUG:調度原子?」的可能原因是什麼?
- 30. 可能導致NoReverseMatch錯誤的原因
它意味着你有一個異步的事情怎麼回事,它尚未。如果你想要建設性的答案,請指定你在說什麼系統調用。 – Mat
我已經指出如何繼續添加手冊頁提取關於如何在此獲取更詳細的信息:http://stackoverflow.com/q/8277540/694576 – alk
無論如何,向我們展示至少您的客戶的代碼肯定會幫助... – alk