Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Valentin Nechayev                    2:5020/400     04 Apr 2000  15:59:00
 To : Eugene Grosbein
 Subject : Re: проблема с accept()
 -------------------------------------------------------------------------------- 
 
         Hello Eugene Grosbein!
 
 EG> Слышал, что в BSD ядро автоматически перезапускает системный вызов
 EG> после его прерывания сигналом. Во FreeBSD это как-то регулируется?
 
 man siginterrupt
 
 EG> Кажется, есть какой-то sysctl, запрещающий перезапуск.
 EG> Проблема вот в чем. Демон висит на accept(), принял - форкнулся,
 EG> и снова на accept(). Приходит сигнал - обработчик выставляет флаг,
 EG> accept() возвращает EINTR, проверяется флаг, реакция на сигнал,
 EG> и снова на accept(). 
 
 EG> Это все работает до первого входящего соединения.
 EG> После отработки первой же итерации accept-fork-accept,
 EG> по приходу сигнала флаг выставляется (обработчик пишет в syslog об этом),
 EG> а accept() не выходит с EINTR. И даже когда приходит следующее
 EG> соединение, оно отрабатывается нормально. А сигнала как-будто и не было.
 
 Очень странно.
 
 EG> Как заставить accept() прерываться?
 
 EG> FreeBSD 3.4, STREAM-сокет домена UNIX, демон собран с pthreads.
 EG> Сам демон потоков не использует, просто слинкован с библиотекой,
 EG> требующей pthreads. Эту библиотека используется после fork().
 
 А. Если pthreads - то не удивительно. ;(
 ... =?koi8-r?Q??=
 -- --
 Valentin Nechayev
 netch@carrier.kiev.ua
 II:LDXIII/DCCCLXXIII.CCC
 --- ifmail v.2.15dev4
  * Origin: Lucky Netch Incorporated (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 проблема с accept()   Eugene Grosbein   04 Apr 2000 14:46:32 
 Re: проблема с accept()   Valentin Nechayev   04 Apr 2000 15:59:00 
Архивное /ru.unix.bsd/20328e7985276.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional