我明白,對於TCP套接字ECONNRESET與RST數據包有關。但是在read()和write()調用中,我也看到了AF_LOCAL套接字的ECONNRESET錯誤。這是什麼意思? ECONNRESET與read()返回0或write()拋出EPIPE有什麼不同?ECONNRESET在AF_LOCAL套接字的上下文中意味着什麼?
25
A
回答
73
看來ECONNRESET意味着另一端已經關閉連接而沒有讀取已發送給它的未完成數據,並且可以在read()和write()兩者上觸發。但確切的行爲取決於操作系統。
EPIPE
似乎被觸發時,一個寫()s到已經被關閉套接字,並沒有什麼出色的輸出數據。適用於PF_LOCAL和TCP套接字。實施例(紅寶石):
a, b = UNIXSocket.pair
b.close
a.write("foo") # => EPIPE, on all OSes
讀()返回0
時對方已經關閉了連接,並且沒有突出傳出數據觸發。適用於PF_LOCAL和TCP套接字。
a, b = UNIXSocket.pair
b.close
a.read # => 0 bytes, on all OSes
ECONNRESET
在Linux上它的行爲是這樣的:
時,有一個尚未被寫入到另一側突出的輸出數據觸發。 read()爲PF_LOCAL和TCP套接字觸發它,但是write()僅爲TCP套接字觸發; PF_LOCAL套接字觸發EPIPE。
查看特定操作系統行爲的示例。如果您知道其他操作系統的行爲,請投稿。
實施例1:對PF_LOCAL插座讀()
a, b = UNIXSocket.pair
a.write("hello")
b.close
a.read
# Linux: ECONNRESET
# OS X : returns 0 bytes
實施例2:在TCP套接字讀()
# Side A # Side B
s = TCPServer.new('127.0.0.1', 3001)
c = s.accept
c = TCPSocket.new('127.0.0.1', 3001)
c.write("hello")
c.close
c.read
# Linux: ECONNRESET
# OS X : returns 0 bytes
實施例3:對PF_LOCAL插座寫()
a, b = UNIXSocket.pair
a.write("hello")
b.close
a.write("world")
# Linux: EPIPE and not ECONNRESET
# OS X : EPIPE and not ECONNRESET
示例4:在TCP套接字上寫入()
# Side A # Side B
s = TCPServer.new('127.0.0.1', 3001)
c = s.accept
c = TCPSocket.new('127.0.0.1', 3001)
c.write("hello")
c.close
c.write("world")
# Linux: ECONNRESET
# OS X : no error
相關問題
- 1. ECONNABORTED在嘗試連接套接字時意味着什麼?
- 2. frame_dummy在分析的上下文中意味着什麼?
- 3. 運行時在.NET CLR的上下文中意味着什麼?
- 4. 「上下文」一詞在結構中通常意味着什麼?
- 5. 線程安全在PHP上下文中意味着什麼?
- 6. 上游在nginx中意味着什麼?
- 7. 下劃線在C#中的數字字面意味着什麼?
- 8. 在AngularJS中結尾意味着什麼double意味着
- 9. 什麼===在PHP意味着
- 10. 在Android上的Google Analytics上下文中,「獨特訪問者」意味着什麼?
- 11. 〜=是什麼。在Stata意味着什麼?
- 12. PREEMPTIVE_XE_DISPATCHER這意味着什麼?
- 13. Field.Index.NOT_ANALYZED_NO_NORMS意味着什麼
- 14. $這意味着什麼PHP?
- 15. MYSQLI_NUM意味着什麼?
- 16. * | *這意味着什麼CSS?
- 17. 溢出意味着什麼?
- 18. HttpServletResponse.SC_BAD_REQUEST意味着什麼?
- 19. 什麼呢JDBC:HSQLDB:hsqlTempFiles意味着
- 20. 奎因意味着什麼?
- 21. sret實際上意味着什麼?
- 22. [Bindable]在動作中意味着什麼?
- 23. #[...]在emacs-lisp中意味着什麼?
- 24. [](){}構造在C++中意味着什麼?
- 25. CLI在PowerCLI中意味着什麼?
- 26. 在gdb中這意味着什麼?
- 27. 0..1在EF中意味着什麼?
- 28. tmp_xxx在java中意味着什麼?
- 29. 'generic'在Django中意味着什麼?
- 30. 撇號在Haskell中意味着什麼?