¿Es seguro emitir llamadas de escritura () en el mismo socket TCP desde múltiples hilos?

Digamos que tengo dos hilos, T1 y T2.

El subproceso T1 realiza una llamada de bloqueo de escritura () en un socket TCP S para enviar un gran búfer de bytes B1. El búfer de bytes B1 es tan grande que (a) los bloques de llamada de escritura y (b) TCP tiene que usar varios segmentos para enviar el búfer.

Thread T2 también realiza una llamada de bloqueo de escritura () en el mismo socket TCP S para enviar otro búfer grande de bytes B2.

Mis preguntas son las siguientes:

¿La implementación de TCP en UNIX garantiza que todos los bytes de B1 se enviarán antes que todos los bytes de B2 (o viceversa)?

O es posible que TCP intercale el contenido de B1 y B2 (por ejemplo, TCP envía un segmento con datos B1, luego un segmento con datos B2, y luego un segmento con datos B1 nuevamente).

PD: Sé que no es una buena idea hacer esto. Estoy tratando de determinar si un código que no escribí es correcto o no.

Respuestas a la pregunta(1)

Su respuesta a la pregunta