Сколько процессов может прослушивать определенный порт?

Сколько процессов может прослушиваться на определенном порту, таком как 80? и как дочерние процессы какого-либо приложения могут использовать один и тот же порт для прослушивания? Есть ли разница между прослушиванием порта или установкой прослушивающего соединения?

2 Solutions collect form web for “Сколько процессов может прослушивать определенный порт?”

В: Сколько процессов может прослушиваться на конкретном порту?

A: столько, сколько вы можете создать.

Однако, по крайней мере, для сокетов SOCK_STREAM и, если вы не используете параметр SO_REUSEPORT (новый в Linux 3.9), процесс не может привязать сокет к локальной конечной точке (адрес + порт для TCP, имя файла для Unix …), если уже есть другой сокет (или прослушивание на этом порту с подстановочным адресом).

Поэтому, если вы не используете SO_REUSEPORT, единственный способ прослушивания разных процессов на одном и том же порту – иметь соответствующие дескрипторы файлов, указывающие на то же самое описание открытого файла (в тот же сокет).

Это происходит автоматически, когда вы выполняете процесс fork() . Если fd 3 указывает на прослушивающий TCP-сокет по подстановочному адресу и порту 12345, оба процесса после того, как fork будет прослушивать этот порт на этом fd (синтаксис zsh ниже):

 $ zmodload zsh/net/tcp $ ztcp -ld 3 12345 $ sleep 10 & $ lsof -ni tcp:12345 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME zsh 26277 stephane 3u IPv4 506354 0t0 TCP *:12345 (LISTEN) sleep 26988 stephane 3u IPv4 506354 0t0 TCP *:12345 (LISTEN) 

Для процессов, которые не связаны друг с другом, единственный способ (который я знаю) для процесса получить доступ к этому SCM_RIGHT сокету должен был бы использовать механизм SCM_RIGHT для передачи fds (в ​​действительности более похожим на описания открытых файлов ) между процессами с использованием сокетов домена unix.

Вы заметите, что один аргумент для listen() – это отставание .

Как только будет прослушиваться сокет на данной конечной точке, ядро ​​начнет принимать входящие подключения к этой конечной точке ( отставание – это подсказка для ядра относительно того, сколько он может принять, которые не accept приложениями ).

Тогда первый процесс, который accept() на любом из fds, указывающих на прослушивающий сокет (или любой из прослушивающих сокетов с SO_REUSEPORT ), получит входящее соединение. accept() создает новый сокет и возвращает новый fd в этот socket . В свою очередь, этот fd можно дублировать (новый fd, указывающий на один и тот же сокет), а детские процессы наследуют этот подключенный сокет, как если бы он прослушивал.

В этом ответе обсуждается TCP на IPv4.

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

Это полностью отличается от количества процессов, которые активно используют этот порт.

Посмотрите следующий результат:

 remote local state *:* - 4.3.2.1:5000 LISTENING 1.2.3.4:12345 - 4.3.2.1:5000 CONNECTED 4.5.6.7:83247 - 4.3.2.1:5000 CONNECTED 

То, что должно быть уникальным, – это 4-кортеж (remote-ip, remote-port, local-ip, local-port) . Поскольку (remote-ip, remote-port) в состоянии LISTENING является *:* , может прослушиваться только один процесс.

Приложение-слушатель начнет новый поток / задачу / процесс для каждого входящего соединения.

  • Как запретить корень, разрешить отдельным пользователям во внутренней подсети и разрешать группы из внешних, на SSH / SFTP
  • Зеркало LFTP включает в себя - включая другие каталоги, отличные от того, что я включил
  • CentOS 6 включает шлюз для статического IP-адреса
  • Как удалить пароль для входа в Centos6.5?
  • Я использую yum для установки vsftpd. Почему он не находится в `/ etc / rc.d / init.d /`?
  • SSH в другую виртуальную машину через сценарий Perl / Sh. Работает вручную
  • Беспроводная связь не работает на Lenovo ThinkPad X201 с CentOs 6.5
  • psmouse serio1 неизвестное оборудование и мышь / тачпад работают ТОЛЬКО в режиме спасения
  • последняя команда, показывающая DNS-сервер вместо ip-адреса
  • Обновление CentOS7 Yum, конфликт с базовыми и обновляемыми репозиториями
  • Как запустить Xvfb без root?
  • Linux и Unix - лучшая ОС в мире.