Прерывание функции accept(3)

Модератор: Модераторы разделов

pvr
Сообщения: 2

Прерывание функции accept(3)

Сообщение pvr »

Здравствуйте!

В одном из потоков консольного приложения есть вызов

fd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen);

После нажатия Ctrl+C основной поток перехватывает сигнал INT закрывает дескриптор sockfd, и функция accept(3) завершается. То же самое мне нужно сделать и при сигнале TERM, возникающем после команды kill n. Я перехватываю сигнал TERM, закрываю дескриптор sockfd и... функция accept(3) не завершается.

Как добиться желаемого и сделать всё по-человечески?
Спасибо сказали:
dronord
Сообщения: 40
ОС: slackware

Re: Прерывание функции accept(3)

Сообщение dronord »

Посмотри вокруг select();
Спасибо сказали:
pvr
Сообщения: 2

Re: Прерывание функции accept(3)

Сообщение pvr »

dronord писал(а):
12.09.2007 10:11
Посмотри вокруг select();

Т.е. ты предлагаешь делать неблокируемый вызов accept(), а потом анализировать через select() и в нужный момент завершать поток?
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Прерывание функции accept(3)

Сообщение v04bvs »

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

Re: Прерывание функции accept(3)

Сообщение grub »

dronord писал(а):
12.09.2007 10:11
Посмотри вокруг select();


А еще лучше с poll
Спасибо сказали: