Entiendo que para sockets TCP, ECONNRESET tiene algo que ver con los paquetes RST. Pero también he visto errores ECONNRESET para sockets AF_LOCAL, en las llamadas read() y write(). ¿Qué significa esto? ¿En qué se diferencia ECONNRESET de read() devolviendo 0 o write() lanzando EPIPE?¿Qué significa ECONNRESET en el contexto de un socket AF_LOCAL?
Respuesta
Parece que ECONNRESET significa que el otro lado ha cerrado la conexión sin leer los datos pendientes que se le han enviado, y puede activarse en read() y write(). Pero el comportamiento exacto depende del sistema operativo.
EPIPE
parece ser desencadenado cuando uno de escritura() s de un socket que ya se ha cerrado, y no hay datos salientes sobresalientes. Aplicable a ambos sockets PF_LOCAL y TCP. Ejemplo (rubí):
a, b = UNIXSocket.pair
b.close
a.write("foo") # => EPIPE, on all OSes
lectura() devolver 0
activa cuando el otro lado ha cerrado la conexión, y no hay datos salientes sobresalientes. Aplicable a ambos sockets PF_LOCAL y TCP.
a, b = UNIXSocket.pair
b.close
a.read # => 0 bytes, on all OSes
ECONNRESET
En Linux se comporta de esta manera:
activa cuando hay pendientes datos salientes que aún no se han escrito en el otro lado. read() lo activa para los sockets PF_LOCAL y TCP, pero write() lo desencadena solo para sockets TCP; Los zócalos PF_LOCAL activan EPIPE.
Vea ejemplos de comportamiento específico del sistema operativo. Contribuya si sabe cómo se comportan otros sistemas operativos.
Ejemplo 1: leer() en el conector PF_LOCAL
a, b = UNIXSocket.pair
a.write("hello")
b.close
a.read
# Linux: ECONNRESET
# OS X : returns 0 bytes
Ejemplo 2: leer() en el socket 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
Ejemplo 3: escribir() en el conector 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
Ejemplo 4: write() en el socket 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. ¿Qué significa Contexto?
- 2. ¿Qué significa "Contexto" en "ServletContext"?
- 3. ¿Qué significa frame_dummy en el contexto de creación de perfiles?
- 4. ¿Qué significa sincronización en el contexto de Vector/ArrayList?
- 5. ¿Qué significa "compensación" en el contexto de la programación?
- 6. ¿Qué significa "predicado" en el contexto de la informática?
- 7. ¿Qué significa "Contexto de gráficos claros"?
- 8. ¿Qué significa hilo seguro en un contexto PHP?
- 9. ¿Qué significa el operador groovy << en este contexto?
- 10. ¿Qué significa el contexto de salida para WaitHandle.WaitOne?
- 11. ¿Qué significa ECONNABORTED cuando intenta conectar un socket?
- 12. Qué significa exactamente "adjuntar contexto" en Eclipse Mylyn
- 13. ¿Qué significa @! significa en un De declaración
- 14. ¿Qué significa enjuagar un enchufe?
- 15. ¿Qué significa ('../') significa?
- 16. ¿Qué significa el término "tipo opaco" en el contexto de "tipo opaco CFBundleRef"?
- 17. ¿Qué significa el símbolo '/' en el CSS
- 18. ¿Qué es un PDI y qué significa?
- 19. ¿Qué significa # en sql?
- 20. ¿Qué significa 'visitante único' en el contexto de Google Analytics en Android?
- 21. ¿Qué es un contexto?
- 22. ¿Qué significa el colon en un constructor?
- 23. ¿Qué significa el acrónimo IDC?
- 24. Símbolo desconocido en el algoritmo: ¿qué significa ∀?
- 25. ¿Qué significa capacidad de compilación en el contexto de la programación funcional?
- 26. Error de socket 10052 en el socket UDP
- 27. ¿Qué significa el símbolo ::: media en I
- 28. ¿Qué significa "perezoso" y "codicioso" en el contexto de las expresiones regulares?
- 29. ¿Qué significa "Core" en el contexto del diseño de la biblioteca?
- 30. ¿Qué significa $$ en el shell?