2010-06-04 11 views

Respuesta

73

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 
Cuestiones relacionadas