Я создаю чат в c под unix. У меня есть серверная и клиентская стороны. Все работает отлично, за исключением случаев, когда клиент закрывает окно оболочки. В этом случае клиент не сообщил серверу, что он собирается, и сервер считает, что он все еще выполнил вход в систему.Какой сигнал посылает оболочка, когда он собирается закрыть
Я хочу обработать сигнал, когда клиент закрывает терминал, нажав кнопку X. Какой сигнал имеет мой процесс? Я пытался обрабатывать SIGHUP, SIGQUIT и SIGTERM, но они, похоже, не работают.
Вы используете какую-либо форму мультиплексирования на стороне сервера? Если бы я не рекомендовал использовать epoll. Таким образом, когда вы закрываете клиента (закрывая сокет на стороне клиента), epoll будет обрабатывать его для вас. Посмотрите это для полного примера https://banu.com/ru/blog/2/how-to-use-epoll-a-complete-example-in-c/ –
SIGHUP - это то, что он должен получить. Может быть, проблема с обработчиком сигнала. –
Вы используете TCP-сокеты? Пожалуйста, добавьте дополнительную информацию. Вы можете использовать тот факт, что закрытие терминала приведет к уничтожению Клиента, поэтому на стороне сервера функция чтения вернет 0. – Edge7