TCP cliente-servidor SIGPIPE

Estoy diseñando y probando un programa de servidor cliente basado en sockets TCP (dominio de Internet). Actualmente, lo estoy probando en mi máquina local y no puedo entender lo siguiente sobre SIGPIPE.

*. SIGPIPE aparece al azar. ¿Puede ser determinista?

Las primeras pruebas incluyeron una operación de envío pequeña (25 caracteres) desde el cliente y la recepción correspondiente en el servidor. El mismo código, en la misma máquina se ejecuta con éxito o no (SIGPIPE) totalmente fuera de mi control. La tasa de falla es aproximadamente el 45% de las veces (bastante alta). Entonces, ¿puedo ajustar la máquina de alguna manera para minimizar esto?

**. La segunda ronda de pruebas fue enviar 40000 mensajes pequeños (25 caracteres) desde el cliente al servidor (1 MB de datos totales) y luego el servidor respondió con el tamaño total de los datos que realmente recibió. El cliente envía datos en un bucle cerrado y hay una SOLA llamada de recepción en el servidor. Funciona solo para un máximo de 1200 bytes de datos totales enviados y, de nuevo, existen estos SIGPIPE no deterministas, aproximadamente un 70% ahora (realmente mal).

¿Puede alguien sugerir alguna mejora en mi diseño (probablemente será en el servidor)? El requisito es que el cliente pueda enviar una cantidad de datos media a muy alta (nuevamente alrededor de 25 caracteres cada mensaje) después de que se haya realizado una conexión de socket único al servidor. Tengo la sensación de que los envíos múltiples contra una sola recepción siempre serán con pérdida y muy ineficientes. Vamos a combinar los mensajes y enviarlos en una sola operación send (). ¿Es ese el único camino a seguir?

Respuestas a la pregunta(2)

Su respuesta a la pregunta