У меня вопрос, потому что я довольно новичок в python, программировании сокетов и сигналах. Я написал сервер сокетов python, который открывает новый процесс обработки запросов для каждого клиента, который подключается к определенному порту. Я поймал сигнал ctrl + c и закрыл соединения с базой данных, если сервер получит такой сигнал.
Поскольку я тестирую свой сервер с помощью команды netcat, мой вопрос: если вы используете CTRL + C для завершения клиентского соединения, которое выполняется в окне bash, может ли сервер поймать этот сигнал SIGINT и действовать на него? или это потому, что клиент, являющийся совершенно другой программой (мой случай - команда netcat), является единственным, который может получать сигнал SIGINT?
Может ли сервер получать команду SIGINT, если клиент будет отключен от клавиатуры?
Заранее спасибо за любую информацию об этом.
Сигналы существуют в собственном процессе: сигнал, возникающий в процессе клиента, не будет известен серверным процессом и наоборот. Ваши варианты заключаются в том, чтобы один процесс сообщал другому, что он завершается, или просто подождите, пока другая сторона заметит, что соединение было отброшено (что, если вы используете TCP/IP, произойдет из отказавшего сокета работа на данном сокете).
EPIPE
есть: вы получите 0 байтов приread()
,EPIPE
приwrite()
.