Безопасно ли выполнять блокирующие вызовы 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 - Я знаю, что это не очень хорошая идея, чтобы сделать это. Я пытаюсь определить, верен ли какой-то код, который я не написал.