Безопасно ли выполнять блокирующие вызовы write () для одного и того же сокета TCP из нескольких потоков?

Допустим, у меня есть две темы, T1 и T2.

Поток T1 выполняет блокирующий вызов write () на TCP-сокете S для отправки большого буфера байтов B1. Буфер байтов B1 настолько велик, что (а) блокирует вызов записи и (б) TCP должен использовать несколько сегментов для отправки буфера.

Поток T2 также выполняет блокирующий вызов write () для того же TCP-сокета S для отправки другого большого буфера байтов B2.

Мои вопросы таковы:

Гарантирует ли реализация TCP в UNIX, что все байты B1 будут отправлены раньше всех байтов B2 (или наоборот)?

Или возможно, что TCP перемежает содержимое B1 и B2 (например, TCP отправляет сегмент с данными B1, затем сегмент с данными B2, а затем снова сегмент с данными B1).

PS - Я знаю, что это не очень хорошая идея, чтобы сделать это. Я пытаюсь определить, верен ли какой-то код, который я не написал.

Ответы на вопрос(1)

Ваш ответ на вопрос