получение значения TOS на сокете TCP - PullRequest
7 голосов
/ 05 января 2012

У меня есть сценарий, когда клиент открывает TCP-соединение с сервером после установки некоторого значения IP TOS (setsockopt(.., IP_TOS, ..). На сервере я хочу получить полученное значение TOS и установить его в сокете, чтобы полученное TOS отражается обратно на пакетах сервер-клиент.

Проблема на стороне сервера, как я могу получить значение TOS, полученное от клиента? Я могу предположить, что клиент не будет изменять значение TOS в течение всего сеанса, поэтому достаточно сначала получить и установить значение TOS.

Установка IP_RECVTOS и использование вспомогательных данных работает для UDP, но не для сокетов TCP. Как можно добиться чего-то подобного на TCP-сокетах? getsockopt(2) с SO_PRIORITY или IP_TOS возвращает настроенные значения в локальном сокете. Так что, если я сделал setsockopt() локально, то getsockopt() отражает это значение. Это не отражает то, что получено в сети.

1 Ответ

2 голосов
/ 05 января 2012

Значение TOS может меняться для каждой полученной дейтаграммы TCP.

Так что это не постоянная опция для принимающего сокета TCP.

Из последнего можно сделать вывод, что для получателя невозможно получить значение для TOS изпринимающий сокет TCP с точки зрения опции, значение которой может быть прочитано с использованием getsockopt().

Поскольку для TCP не существует такой функции, как «вспомогательные сообщения», единственный способ увидеть, что это отправитель , установленный как TOS, должен непосредственно проверять заголовки полученной дейтаграммы TCP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...