Это невозможно при использовании стека TCP хоста просто потому, что стек TCP, следующий за RFC 793, не должен предоставлять такой вид доступа к приложению.
То есть, нетt (и не должно быть) способ повлиять на то, что нижние уровни делают с вашими данными.Конечно, есть способы повлиять на то, что делает TCP
(например, Нэгл), но это противоречит духу протокола.TCP
следует использовать для достижения наилучших результатов: для передачи непрерывного упорядоченного потока байтов.Ни больше ни меньше.Нет сообщений, пакетов, фреймов.
Если в конце концов вам нужно контролировать эти детали, вам нужно взглянуть на API более низкого уровня.Вы можете использовать SOCK_RAW
и PF_PACKET
.
Пакетные сокеты используются для приема или отправки необработанных пакетов на уровне драйвера устройства (уровень 2 OSI).
@gby упомянул UDP, и это (частично) хорошая идея: UDP
имеет фиксированный размер.Но имейте в виду, что вам придется иметь дело с фрагментацией IP (или использовать IP_DONTFRAG
).