Estoy probando una comunicación cliente-servidor a través de un socket TCP. Escribí el servidor en C y lo estoy ejecutando en una máquina Linux y estoy usando nc
como cliente para la prueba.Tubo roto solo en el segundo envío en un socket cerrado
El servidor, después de un intercambio inicial de mensajes con el cliente, envía algunos mensajes periódicamente al cliente sin obtener ninguna respuesta.
Si mato al cliente, espero que la primera send()
realizado por el servidor falla con EPIPE
de error, pero esto se vuelve a cabo sólo en la segunda send()
después de que el cliente ha ido! El primer send()
después de matar al cliente puede enviar correctamente 1100 bytes al socket (supongo que cerrado). La siguiente operación send()
finaliza con EPIPE
como se exepción.
¿Hay alguien que pueda explicarme este comportamiento? ¿Es por el hecho de que escribo en la pila de TCP/IP por lo que depende de la pila entregar cuando puede? En caso afirmativo, ¿cómo puedo verificar el estado de la conexión? Para estar seguro de que el par todavía está allí.
Gracias por su respuesta, detallada y clara. Desafortunadamente no puedo probar la opción nc que me sugirió porque el comando en mi máquina Linux no parece ser compatible.Por cierto, la documentación que me indicaste y las explicaciones que me diste son claras y útiles. ¡Gracias! – Igor