когда установлен пуш-флаг в сегменте tcp - PullRequest
6 голосов
/ 15 февраля 2010

я задал этот предыдущий вопрос здесь:

tcp две стороны пытаются подключиться одновременно

Я попробовал метод, приведенный в решении, и во время отправки при использовании netcat и перехвата пакетов с ethereal я заметил, что когда я отправлял строку "привет" с одной стороны на другую, она отправлялась в сегменте с установленным флагом push .

кто решает установить флажок? Каковы правила для установки push или срочного флага в сегменте tcp? Можно ли это сделать с помощью сокетов API?

Ответы [ 2 ]

6 голосов
/ 16 февраля 2010

Вы можете установить СРОЧНЫЙ флаг, используя send() с установленным флагом MSG_OOB. Поскольку это подразумевает, что отправленные данные будут внеполосными, то есть они обычно не будут приниматься вызывающей стороной, просто вызывающей read(). Принимающая сторона получит некоторую индикацию данных OOB, таких как сигнал SIGURG, или сокет станет исключительным и может быть проверен как таковой, используя select().

Большую часть времени вы не хотите устанавливать СРОЧНЫЙ флаг.

6 голосов
/ 15 февраля 2010

Флаг PUSH используется стеком tcp, чтобы в основном сказать: «Я готов на данный момент». Это просто означает, что сегмент данных полностью передан источником.

Нет способа указать или контролировать его в пользовательском пространстве (ваш сокет api), так как это просто стек / реализация tcp, чтобы сделать это. Как СРОЧНЫЙ флаг.

(Источник: Ричард Стивенс - Tcp / ip, иллюстрированный том 1 , глава 20)

...