C ++: как закрыть tcp сокет (сервер) при получении SIGKILL

Как я могу закрыть сокет прямо перед смертью?
У меня есть служба Linux, которая создает TCP-сервер. Иногда мне нужно перезапустить его, и я хочу, чтобы сокет действительно был закрыт. На данный момент висит.
Я также знаю, что с SIGKILL нельзя справиться.
Может кто-то указать мне верное направление?

1

Решение

Сокет будет закрыт — ОС автоматически сделает это, смотрите: Использование SO_REUSEADDR — Что происходит с ранее открытым сокетом?

Вместо того, чтобы пытаться обработать SIGKILL, который не работает, решите проблему при запуске:

Использовать SO_REUSEADDR опция сокета, которая позволяет вам сразу же повторно использовать порт.

4

Другие решения

Вы ничего не можете сделать на SIGKILL. Вы должны попытаться обработать SIGTERM и / или SIGINT, чтобы прекратить обслуживание и закрыть сокет.

Нет необходимости отправлять SIGKILL, если

  1. Приложение игнорирует SIGTERM и SIGINT
  2. Система действительно должна немедленно прекратить применение

Если вы хотите перезапустить свой сервис, вы должны отправить SIGTERM или SIGINT вместо SIGKILL.

0

По вопросам рекламы [email protected]