Здравствуйте, smeeld, Вы писали:
S> если разные dport будут соответствовать одному
S> и тому же сокету то что будет если в системе появится второй сокет с таким же dport+daddr? Как определить
S> здесь к какому из двух сокетов направлен пакет с данным daddr?
Речь о другом ограничении: что по двум разным ключам
(daddr, dport) нельзя держать одинаковые значения (указатели на одну и ту же структуру). Но даже если с
SO_REUSEADDR появятся другие сокеты на том же
(daddr, dport), сработает round-robin, о которой вы говорите с
netch80, чему помешают одинаковые значения, не ключи?
Я совсем не знаю механизмов ядра, и могу ошибаться, но как понял фрагмент, на который вы
далиАвтор: smeeld
Дата: 04.06.15
ссылку, round-robin организуется изменением поля
sk_refcnt той структуры-сокета, которую выбрали при очередном поиске. Раз сокет один, это подвинуло бы его во всех круговых очередях, где он участвует. Тогда был бы такой проблемный сценарий (полужирным отмечено, кому достается пакет):
Правка, забыто: Пусть сокет s1 привязан к e1, s2 привязан к e2, s3 привязан к e1 и e2 (чего сейчас нельзя).
Но даже если так — получается, причина запрета только в реализации, и с точки зрения логики работы сетевого стека препятствий нет?