Какова семантика получения EADDRINUSE, когда не подключен прослушивающий сокет, но соединения открыты

Рассмотрим родительский процесс, который завершает socket/bind/accept и будет вилка детей с этим сокетом, открытым для них, чтобы общаться с ними, в то время как родитель продолжает принимать соединения. Затем этот родительский процесс будет убит.

Другой процесс теперь пытается привязать к тому же адресу, к которому был привязан родительский процесс, в том же порту, но получает ошибку EADDRINUSE.

Однако, когда вы завершаете этот процесс с помощью sshd , кажется, что sshd может переустановить порт, который был закрыт, а во время перезапуска (где родительский процесс sshd не запущен) другая программа (работающая как другой пользователь) просто получает EADDRINUSE.

Какова семантика этого? Почему sshd может перепрограммироваться, но другой процесс пользователя не может?

Кроме того, я могу подтвердить, что netstat -a | grep PORT netstat -a | grep PORT выводится из-за того, что выполняется только дочерний процесс (когда другой процесс не может быть bind ), единственное соединение – ESTABLISHED , ни один в состоянии LISTEN .

One Solution collect form web for “Какова семантика получения EADDRINUSE, когда не подключен прослушивающий сокет, но соединения открыты”

Хотя я не понимаю всю семантику (я либо искал не то место, либо документация не хватает), я считаю, что в течение определенного времени после закрытия соединения (возможно, установленного SO_LINGER ) никакой процесс может открыть новый сокет с теми же подробностями, если у них нет SO_REUSEADDR .

Это необходимо для предотвращения повторного подключения второй после закрытия соединения, и процесс должен иметь дело с пакетами, предназначенными для предыдущего процесса, как я понимаю.

man 7 socket не документирует это как часть SO_REUSEADDR чего этот ответ трудно понять.

  • Как ограничить диапазон случайных портов?
  • Порт 80 отказался от Linux (Ubunt 12.04)
  • Порт открыт высоко в течение нескольких минут чаще
  • Как проверить, что ядро ​​Linux не замерзает при загрузке или загрузке больших данных через интерфейс Ethernet?
  • Как сервер узнает, какой клиентский порт должен отправлять?
  • Являются ли / dev / {udp, tcp} стандартизованными или доступными повсюду?
  • Почему первые 1024 порта ограничены только пользователем root?
  • Анализ сетевого трафика
  • NFS отменяет постоянное время TCP?
  • Выберите YeAH-TCP, как алгоритм управления перегрузкой, чтобы настроить ядро
  • Почему Linux не использует диапазон портов IANA Ephemeral?
  • Interesting Posts

    Как получить 3 строки выше соответствующего параметра

    Проводное соединение от CLI с NetworkManager – «вверх» элегантным способом

    В чем разница между `autoload` и` autoload -U` в Zsh?

    Ограничение IP-адреса оборудования Ethernet

    Неотслеживаемая проблема стабильности ядра 3.6.8 на ASUS P53E

    Rsync: Как синхронизировать только определенные типы файлов из определенных каталогов?

    слэш (/) после имени каталога в командах оболочки

    sed для ограничения столбцов до 15 символов

    ERROR: init: ttyS0 (/ dev / ttyS0) основной процесс (1612), завершенный статусом 1

    Как заменить значки в Linux Mint?

    Почему команда rename не работает так, как ожидалось?

    Как предотвратить выполнение заданий cron в определенные моменты времени в Debian? («игровой» / «режим производительности»)

    Найти команду: как игнорировать регистр?

    Обновление Synaptic: следует ли принимать изменения в файлы системной конфигурации, такие как / etc / lsb-release?

    С помощью команды «cat» Linux, как показать только определенные строки по числу

    Linux и Unix - лучшая ОС в мире.