я задал этот предыдущий вопрос здесь:
tcp две стороны, пытающиеся соединяться одновременно
я попробовал метод, данный в решении и при отправке при использовании netcat и сниффинге пакетов с эфирным, я заметил, что, когда я отправил "привет" строка от одной стороны до другого, это было отправлено в сегменте с набором флага нажатия.
кто решает установить флаг нажатия? каковы правила для установки нажатия или срочного флага в сегменте TCP? действительно ли возможно сделать это с помощью API сокетов?
Флаг PUSH используется стеком tcp для того, чтобы в основном сказать: «На данный момент все готово». Это просто указывает на то, что сегмент данных полностью передан источником.
Невозможно указать или контролировать это в пользовательском пространстве (ваш сокет api), так как это всего лишь стек / реализация tcp для этого. Как СРОЧНЫЙ флаг.
(Источник: Ричард Стивенс - Tcp / ip, иллюстрированный том 1 , глава 20)
Вы можете установить флаг СРОЧНО с помощью send ()
с установленным флагом MSG_OOB
. Это означает, что отправленные данные будут внеполосными, то есть они обычно не будут получены вызывающей стороной, просто вызывающей read ()
. Принимающая сторона получит некоторую индикацию данных OOB, например, сигнал SIGURG
, или сокет станет исключительным и может быть проверен как таковой с помощью select ()
.
В большинстве случаев вы не хотите устанавливать флаг СРОЧНО.