Кстати, если тема представляет еще для кого-то практический интерес, подключайтесь! (Сорри, что это оффтопик в рассылке nginx.) Я пока нарыл вот что. В server\mpm\prefork\prefork.c есть кусочек:<br><br><span style="font-family: courier new,monospace;">    /* Set up the pollfd array */</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">    /* ### check the status */</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    (void) apr_pollset_create(&amp;pollset, num_listensocks, pchild, 0);</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    for (lr = ap_listeners, i = num_listensocks; i--; lr = lr-&gt;next) {</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        apr_pollfd_t pfd = { 0 };</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        pfd.desc_type = APR_POLL_SOCKET;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        pfd.desc.s = lr-&gt;sd;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        pfd.reqevents = APR_POLLIN;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        pfd.client_data = lr;</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        /* ### check the status */</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        (void) apr_pollset_add(pollset, &amp;pfd);</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    }</span><br style="font-family: courier new,monospace;">
<br>Эта штука создает список сокетов, на которых ниже происходит цикл ожидания активности (причем в этот цикл попадает только один процесс апача, остальные ждут на мьютексе):<br><br><span style="font-family: courier new,monospace;">/* timeout == -1 == wait forever */</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">status = apr_pollset_poll(pollset, -1, &amp;numdesc, &amp;pdesc);</span><br style="font-family: courier new,monospace;"><br>Первый активный сокет будет подхвачен процессом. Так вот, мысль первая: если в кусочке выше добавлять в список не все сокеты, а только те, лимит коннектов на которые не превышен, то, теоретически, можно добиться принудительного ограничения на число коннектов. <br>
<br>Правда, непонятно, что делать, когда число соединений на каком-то сокете обратно стало меньше порогового. Освободившийся сокет в очередь легко не пропихнуть... Вернее, можно, конечно, выше в <span style="font-family: courier new,monospace;">apr_pollset_poll()</span> поставить не &quot;вечный&quot; тайм-аут, а 1 секунду (плюс новый apr_pollset_create() при наступлении тайм-аута), тогда он будет заново строить pollset, и вроде как проблема решается (ценой передергивания очереди раз в секунду).<br>
<br><br><br><br><div class="gmail_quote">2009/11/30 Dmitry Koterov <span dir="ltr">&lt;<a href="mailto:dmitry@koterov.ru">dmitry@koterov.ru</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im"><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
теоретически - наверное возможно обучить апач параметру SocketMaxConn,<br>
но большое количество listening сокетов - это неустранимый недостаток,<br>
что может отрицательно сказаться потом на производительности сервера.<br>
<br></blockquote></div></div>А что это за параметр, где он устанавливается? Мне сходу не удалось найти ничего похожего в системных вызовах...<br>
</blockquote></div><br>