Ich verstehe, dass für ECONNRESET TCP-Sockets etwas mit RST-Paketen zu tun hat. Aber ich habe ECONNRESET-Fehler für AF_LOCAL-Sockets auch bei read() - und write() -Aufrufen gesehen. Was bedeutet das? Wie unterscheidet sich ECONNRESET von read() mit 0 oder write() mit EPIPE?Was bedeutet ECONNRESET im Zusammenhang mit einem AF_LOCAL-Socket?
Antwort
Es scheint, dass ECONNRESET bedeutet, dass die andere Seite die Verbindung geschlossen hat, ohne ausstehende Daten zu lesen, die an sie gesendet wurden, und kann sowohl bei read() als auch bei write() ausgelöst werden. Das genaue Verhalten hängt jedoch vom Betriebssystem ab.
EPIPE
Scheint ausgelöst zu werden, wenn ein write() s an eine Steckdose, die bereits geschlossen wurde, und es gibt keine ausstehenden ausgehende Daten. Anwendbar für PF_LOCAL- und TCP-Sockets. Beispiel (Rubin):
a, b = UNIXSocket.pair
b.close
a.write("foo") # => EPIPE, on all OSes
read() zurückkehr 0
ausgelöst, wenn die andere Seite der Verbindung geschlossen hat, und es gibt keine ausstehenden ausgehende Daten. Anwendbar für PF_LOCAL- und TCP-Sockets.
a, b = UNIXSocket.pair
b.close
a.read # => 0 bytes, on all OSes
ECONNRESET
Auf Linux verhält es sich wie folgt aus:
ausgelöst, wenn herausragende abgehende Daten ist es, die noch nicht auf die andere Seite geschrieben hat. read() triggert es sowohl für PF_LOCAL- als auch TCP-Sockets, aber write() triggert es nur für TCP-Sockets; PF_LOCAL Sockets lösen EPIPE aus.
Siehe Beispiele für spezifisches Betriebssystemverhalten. Bitte tragen Sie dazu bei, wenn Sie wissen, wie sich andere Betriebssysteme verhalten.
Beispiel 1: read() auf PF_LOCAL Buchse
a, b = UNIXSocket.pair
a.write("hello")
b.close
a.read
# Linux: ECONNRESET
# OS X : returns 0 bytes
Beispiel 2: read() auf TCP-Socket
# 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
Beispiel 3: write() auf PF_LOCAL Buchse
a, b = UNIXSocket.pair
a.write("hello")
b.close
a.write("world")
# Linux: EPIPE and not ECONNRESET
# OS X : EPIPE and not ECONNRESET
Beispiel 4: write() auf TCP-Socket
# 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. Was bedeutet ---- im Zusammenhang mit StringBuilder.ToString()?
- 2. Was bedeutet MVC sogar im Zusammenhang mit IOS?
- 3. Was bedeutet "Offset" im Zusammenhang mit der Programmierung?
- 4. Was bedeutet das Wort "Capture" im Zusammenhang mit Lambda?
- 5. Was bedeutet frame_dummy im Zusammenhang mit dem Profiling?
- 6. Was bedeutet das Wort TREESAME im Zusammenhang mit Git?
- 7. Was bedeutet der _ Parameter in diesem Zusammenhang?
- 8. Was ist im Zusammenhang mit OpenCV "ippicv"?
- 9. Was bedeutet!() Bedeutet im Datenkonstruktor?
- 10. Was ist ORM im Zusammenhang mit Ruby on Rails?
- 11. Was bedeutet Intel "im Ruhestand"?
- 12. Hohe Verfügbarkeit - Was bedeutet Crossover in diesem Zusammenhang?
- 13. Was bedeutet "einzigartiger Besucher" im Zusammenhang mit Google Analytics auf Android?
- 14. Was bedeutet "lokales Caching von Daten" im Zusammenhang mit diesem Artikel?
- 15. Was zieht sich im Zusammenhang mit OCaml zurück?
- 16. UIViews im Zusammenhang mit Speicherlecks
- 17. Was bedeutet [^.] * Im regulären Ausdruck?
- 18. Was sind "ForwardedTypes" im Zusammenhang mit Castle Windsor Komponentenregistrierung?
- 19. Was bedeutet "lokal [*]" im Funken?
- 20. Was bedeutet # in SQL?
- 21. Was bedeutet "hinten" im Quellbaum?
- 22. Was bedeutet "cb" im Loopback?
- 23. Was bedeutet exc_breakpoint im Debugging?
- 24. Was bedeutet Incident im Softwaretest?
- 25. Anzeigedaten im Zusammenhang mit einem Drop-Down-Option
- 26. Skalierbarkeit Fragen im Zusammenhang
- 27. Was bedeutet ~ in Java?
- 28. Facebook Fehler im Zusammenhang mit authen.extendSSOAccessToken
- 29. Github keine Adresse im Zusammenhang mit Namen
- 30. mocha superest ECONNRESET