2011-06-03 3 views
2

В моем собственном опыте я связываю 1 сокет и отправляю запросы другим потокам.В чем преимущество, позволяющее нескольким сокетам прослушивать один и тот же порт?

Но знаменитый веб-сервер nginx - это bind() несколько сокетов на порт назначения.

Какая польза от этого?

+0

А? вы должны быть в состоянии сделать это, только если вы привязаны к другому IP/интерфейсу. То, что вы можете сделать, это 'accept()' на нескольких процессах/потоках, и ядро ​​выберет одно, возможно, пробудив только одно (избегая проблемы с громовым стадом). – ninjalj

+0

@ninjalj, это не тот случай с nginx, он привязывает несколько сокетов к одному и тому же IP/интерфейсу. –

+0

Обычно невозможно связать несколько сокетов с одной и той же парой IP/Port одновременно. 'bind()' завершится с ошибкой. Разумеется, нет никакой пользы от этого, даже если бы это было возможно. –

ответ

1

Просматривая источник nginx, я не вижу такой возможности. Цитата из человека странице ip(7)

Когда процесс хочет получить новые входящие пакеты или соединения, он должен связать сокет с локальным адресом интерфейса, используя привязку (2). Только один разъем IP может быть привязан к любой локальной (адрес, порт) паре.

Итак, я думаю, что происходит что-то еще. Можете ли вы упомянуть, как вы определили, что nginx делает это?

Смежные вопросы