Вступить в клуб →
сложнаявопросLinux, многопоточность и сеть

После перезапуска сервис не может занять свой порт

Сервис перезапускается при выкатке. Иногда bind завершается ошибкой «Address already in use», хотя старый процесс уже завершён и в списке процессов его нет. Через одну-две минуты запуск проходит без изменений в коде. Просмотр состояния сокетов показывает на этом порту множество записей в состоянии TIME_WAIT.

Что происходит и как это правильно решать?

  • Старый процесс на самом деле жив и продолжает держать порт: при рестарте его нужно принудительно убивать сигналом
  • Закрытые соединения ещё в состоянии TIME_WAIT, адрес считается занятым; нужен параметр повторного использования адреса до bind
  • Порт занял другой сервис, поэтому нужно выбрать свободный порт из непривилегированного диапазона и закрепить его
  • Соединения нужно закрывать вызовом shutdown вместо close: тогда состояние TIME_WAIT не возникает и порт освобождается сразу

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела