Здравствуйте!
В одном из потоков консольного приложения есть вызов
fd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen);
После нажатия Ctrl+C основной поток перехватывает сигнал INT закрывает дескриптор sockfd, и функция accept(3) завершается. То же самое мне нужно сделать и при сигнале TERM, возникающем после команды kill n. Я перехватываю сигнал TERM, закрываю дескриптор sockfd и... функция accept(3) не завершается.
Как добиться желаемого и сделать всё по-человечески?
Прерывание функции accept(3)
Модератор: Модераторы разделов
-
dronord
- Сообщения: 40
- ОС: slackware
Re: Прерывание функции accept(3)
Посмотри вокруг select();
-
pvr
- Сообщения: 2
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Прерывание функции accept(3)
pvr писал(а): ↑12.09.2007 09:54Здравствуйте!
В одном из потоков консольного приложения есть вызов
fd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen);
После нажатия Ctrl+C основной поток перехватывает сигнал INT закрывает дескриптор sockfd, и функция accept(3) завершается. То же самое мне нужно сделать и при сигнале TERM, возникающем после команды kill n. Я перехватываю сигнал TERM, закрываю дескриптор sockfd и... функция accept(3) не завершается.
Как добиться желаемого и сделать всё по-человечески?
С sigaction поиграйся.
-
grub
- Сообщения: 128
- ОС: Slackware 12.0