|
|
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)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/20328e7985276.html, оценка из 5, голосов 10
|