On Tue, Oct 19, 2010 at 05:56:36PM +0400, Dmitry E. Oboukhov wrote: > >> хочется некоторых фич от inetd, однако не знаю реализовывал ли их > >> кто-нибудь. > >> > >> в частности хочется опции prefork=n (вернее даже preexec), чтобы > >> сократить время отклика на время форка и старта/инициализации > >> приложения. > > PP> Хмм, а что прикажете на file descriptor 0 новому процессу отдасть? > PP> Нормально - там inet/Unix socket связи с клиентом стоит; чего подать > PP> новому серверному процессу при preexec? > > PP> Prefork на ниво inetd не даст премного доброго, если после того > PP> exec надо делать, когда client connection придет. [snip хороший performance analysis случаев с и без inetd] > Ну и вот отсюда и возникли "странные желания": взять и приделать к > inetd prefork с pre-exec. Так вот inetd и создан для не очень натоваренных серверов, когда такой оверхед приемлим. Если Вы можете Ваш сервер дописать так чтоб у него был собственный bind/listen/accept loop, inetd и не нужен. (кроме случая, когда серверу нужно ждать и на inet, и на Unix socket, и на чего-то еще...) > то есть слушалка держит наготове N предварительно запущенных программ. > в качестве stdin/stdout на них смотрит сокет. Все они спят на этом > сокете (каждый на своем). > > Затем приходит соединение, процесс форкается и в форке тупо гонятся > данные из/в одного сокета в/из другой. Наибольший проблем в такой схеме - невозможность inetd передать серверу никакой информации о том какой клиент привязался. Обычно, когда fd 0 и есть прямая связь с клиентом, сервер может сделать getpeername() (и даже getsockname()) и "знать" все о клиенте. В Вашем случае такая информация можно передать только по каком-то допольнительном канале - что-то нестандартное, которое не будет работать с существующими серверами. Всего лучшего, Петр -- Peter Pentchev roam@space.bg roam@ringlet.net roam@FreeBSD.org PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553 What would this sentence be like if it weren't self-referential?
Attachment:
signature.asc
Description: Digital signature