Какова семантика получения 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 чего этот ответ трудно понять.

  • Увеличится ли средняя загрузка моего ящика Linux, если он достигнет дескрипторов файлов или ограничений TCP-соединений?
  • Сервер ретрансляции для общего трафика TCP?
  • Как получить доступ к http-серверу из сценария bash с существующим подключением tcp?
  • Linux Сетевая маршрутизация на виртуальные IP-адреса из другой подсети
  • Данные о трубах от подключения сокета TCP к терминалу
  • Как изменить заголовок команды при запуске сервера?
  • Лучше ли устанавливать -j REJECT или -j DROP в iptables?
  • Как слушать все порты (UDP и TCP) или сделать их все открытыми в Debian
  • Более быстрые альтернативы lsof
  • Обертка для предотвращения доступа программы к нелокальным соединениям
  • Проблема с подключением FTP в UNIX
  • Interesting Posts

    Скопируйте файлы с удалением суффикса в имени

    Простой эмулятор терминала (с возможностью записи) с меткой-копией с «универсальным» $ TERM

    Можно ли сделать правую кнопку мыши сделать что-то еще в Linux Mint?

    httpd не может записывать в папку / файл из-за SELinux

    Как проверить, находится ли элемент в массиве bash?

    сценарий оболочки для управления количеством процессов пользователя

    переименовать несколько файлов с одной переменной

    Конфигурация Nginx – заголовки кэша на определенных путях

    Доступ к ретрансляции запрещен при использовании SMTP для внешних получателей POSTFIX FREEBSD

    Автоматически раскрасить вывод дерева

    Как выполнить команду при входе в систему для пользователя системы без домашней папки и личного файла .bashrc?

    tar: короткое чтение

    Греп для числа в строке

    Можно ли запускать программы (сохраненные в меню) с терминала?

    Как сохранить совпадения UID / GID-сопоставлений при архивировании гостевого LXC?

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