Обработка Ctrl-C в Linux TCP / IP-сервере, написанном на C - PullRequest
1 голос
/ 21 ноября 2010

В настоящее время я работаю на сервере Linux TCP / IP. Серверная программа работает на языке C. В настоящее время я тестирую ее, но каждый раз, когда я выхожу из нее с помощью Ctrl-c, порт, который она использует, не освобождается, равно как и база данных, в которую она пишет, разблокирована. Как определить подпрограмму, которая будет выходить при получении сигнала Ctrl + C?

Ответы [ 3 ]

1 голос
/ 21 ноября 2010

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

1 голос
/ 21 ноября 2010

@ Bortds Обычно порт освобождается не сразу, вам придется подождать некоторое время. Я нашел это из серверного проекта, над которым работал.

1 голос
/ 21 ноября 2010

Два варианта:

  1. Добавить процедуру очистки с помощью: int atexit (void (* function) (void));
  2. Подцепить Ctrl + C с помощью: сигнала sighandler_t (int signum, обработчик sighandler_t);

Как указал R, sigaction более переносим, ​​чем signal , но, возможно, менее идиоматичен для Linux.

Предупреждение: подпрограммы atexit не будут запускаться, если ваша программа убита с помощью SIGKILL (Ctrl + /) или получен любой другой необработанный сигнал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...