Cuando falla una conexión de socket TCP, ¿cómo aprenden los dos extremos sobre el motivo exacto del fallo?

Si está hablando de la falla inicial del establecimiento de la conexión, entonces,
El host A que solicita una conexión con el host B llamará a la llamada del sistema connect () que enviará el paquete SYN al host B. El host B se bloqueará en la llamada del sistema accept () esperando que algún cliente envíe un mensaje SYN, después de eso 3 forma en que continúa el apretón de manos.
connect () en A y accept () en B volverán solo si los 3 paquetes de protocolo de enlace se intercambian entre ellos.

Los siguientes errores pueden usarse para identificar el problema
1) ECONNREFUSED
Esto se debe a que no hay proceso escuchando en el puerto especificado en el Host B.
2) ENETUNREACH
La red es inalcanzable, lo que significa que las memorias intermedias de los enrutadores están llenas y el paquete se descarta y el mensaje ICMP lo reconoce.
3) EHOSTUNREACH
El host es inalcanzable. Esto se debe a que no hay entrada de reenvío en la tabla de enrutamiento de un enrutador.
4) ECONNRESET
Si algo sale mal con el Host, envía un paquete RST. Esto se produce después del establecimiento de la conexión cuando el host A o B no puede recibir ningún paquete y simplemente quiere salir.
5) ECONNABORTED
Debido a algún error de software.

El Host A obtiene todos los errores excepto ECONNRESET de la llamada connect () donde, como en el Host B accept () pasa los errores de red ya pendientes en el nuevo socket como un código de error de accept (). Este comportamiento difiere de otras implementaciones de socket BSD. Para un funcionamiento confiable, la aplicación debe detectar los errores de red definidos para el protocolo después de accept () y tratarlos como EAGAIN volviendo a intentarlo. En el caso de TCP / IP, estos son ENETDOWN , EPROTO , ENOPROTOOPT , EHOSTDOWN , ENONET , EHOSTUNREACH , EOPNOTSUPP y ENETUNREACH .

ECONNRESET es recibido por cualquiera de los hosts cuando el otro intenta restablecer la conexión