<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: bind AF_UNIX AF_INET помогите открыть сокет</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8145.html</link>
    <description>Здравствуйте!&lt;br&gt;Помогите пожалуйста разобраться!&lt;br&gt;&lt;br&gt;Использую библиотеку libevent для создания многопоточного демона на C&lt;br&gt;там есть функции &amp;lt;evhttp.h&amp;gt; - простой веб-сервер запускающий дочерние процессы на запросы методом epoll (linux).&lt;br&gt;&lt;br&gt;Посмотрел исходники, там при создании сокета (socket) и соответственно bind используется тип AF_INET, то есть адрес:порт.&lt;br&gt;&lt;br&gt;У меня есть два варианта - &lt;br&gt;1. использовать nginx и отправлять запросы оттуда методом proxy_pass на свой демон&lt;br&gt;2. подключаться напрямую к демону.&lt;br&gt;&lt;br&gt;2-ой вариант работает, но чтобы не вытаскивать все наружу хочу рассмотреть  первый.&lt;br&gt;Производительность у демона и nginx примерно одинаковая - делал замеры.&lt;br&gt;Если же в proxy_pass использовать адрес:порт, то IPC происходит медленно, в 3-4 раза снижается производительность, чем если подключаться напрямую.&lt;br&gt;nginx создает свои worker_processes и у меня вопросы:&lt;br&gt;&lt;br&gt;1. при отправке через nginx нужен ли epoll() демону?&lt;br&gt;2. если да, то можно ли использовать epoll() для совместного доступа к сокету типа AF_UNIX?&lt;br&gt;</description>

<item>
    <title>bind AF_UNIX AF_INET помогите открыть сокет (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8145.html#6</link>
    <pubDate>Fri, 13 Mar 2009 15:45:00 GMT</pubDate>
    <description>Теперь значительно понятней что вообще хотите сделать и в чем проблема. Пока только такие идеи:&lt;br&gt;Можно попробовать самостоятельно открыть AF_UNIX сокет и передавать его в функции libevt. Однако работа с AF_UNIX несколько отличается от работы с AF_INET так что работоспособность будет зависеть от кода самой libevt.&lt;br&gt;Использование профайлера в обоих вариантах подключения может помочь найти тормозящий участок кода.&lt;br&gt;Возможно играет роль буферизация вывода. &lt;br&gt;</description>
</item>

<item>
    <title>bind AF_UNIX AF_INET помогите открыть сокет (andribas)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8145.html#5</link>
    <pubDate>Fri, 13 Mar 2009 05:12:00 GMT</pubDate>
    <description>&amp;gt;  напиши еще, как epoll запускает дочерние процессы. он вообще-то этого &lt;br&gt;&amp;gt;не должен уметь, это всего лишь нотификация об эвентах , в &lt;br&gt;&amp;gt;частности на сокете ... &lt;br&gt;&lt;br&gt;Спасибо, теперь разобрался с этим. дочерних не запускается.&lt;br&gt;Loop выглядит так:&lt;br&gt;&lt;br&gt;volatile event_gotsig;&lt;br&gt;&lt;br&gt;while (event_gotsig) &#123;&lt;br&gt;  event_gotsig = 0;&lt;br&gt;  &lt;br&gt;  if (event_sigcb) &#123;&lt;br&gt;    res = (*event_sigcb)();&lt;br&gt;    if (res == -1) &#123;&lt;br&gt;      errno = EINTR;&lt;br&gt;      return (-1);&lt;br&gt;    &#125;&lt;br&gt;  &#125;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt;непонятно, причем тут epoll() и что такое совместный доступ к сокету&lt;br&gt;&amp;gt;у тебя какая-то либа (evhttp) делает http сервис? тебе не нравится, как она это делает ?&lt;br&gt;&lt;br&gt;Спасибо. epoll тут не при чем. Как писал товарищ выше у меня действительно каша.&lt;br&gt;Ну если бы я точно знал, что мне мешает, я бы сам и понял как это сделать.&lt;br&gt;&lt;br&gt;Такой сценарий:&lt;br&gt;1. Пользователь отправляет запрос на веб-сервер.&lt;br&gt;2. Запрос попадает к nginx и он отдает его моей либе.&lt;br&gt;3. Я его обрабатываю и отдаю обратно nginx.&lt;br&gt;&lt;br&gt;Производительность запросов статических файлов на тестовом компьютере - 20К</description>
</item>

<item>
    <title>bind AF_UNIX AF_INET помогите открыть сокет (alexx)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8145.html#4</link>
    <pubDate>Fri, 13 Mar 2009 02:24:08 GMT</pubDate>
    <description>  напиши еще, как epoll запускает дочерние процессы. он вообще-то этого не должен уметь, это всего лишь нотификация об эвентах , в частности на сокете ...&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>bind AF_UNIX AF_INET помогите открыть сокет (alexx)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8145.html#3</link>
    <pubDate>Fri, 13 Mar 2009 02:19:21 GMT</pubDate>
    <description>&lt;br&gt; непонятно, причем тут epoll() и что такое совместный доступ к сокету&lt;br&gt; у тебя какая-то либа (evhttp) делает http сервис? тебе не нравится, как она это делает ?&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>bind AF_UNIX AF_INET помогите открыть сокет (andribas)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8145.html#2</link>
    <pubDate>Thu, 12 Mar 2009 05:58:19 GMT</pubDate>
    <description>&amp;gt;&amp;gt;Как Вы понимаете, ключевое слово производительность. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Нет, ключевое слово &quot;каша&quot; :) &lt;br&gt;&lt;br&gt;Хорошо, если так не понятно, приведу куски кода.&lt;br&gt;&lt;br&gt;Это мой сервер-демон:&lt;br&gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;event.h&amp;gt;&lt;br&gt;#include &amp;lt;evhttp.h&amp;gt;&lt;br&gt;&lt;br&gt;void fhttpd_gencb(struct evhttp_request * evreq, void * arg);&lt;br&gt;&lt;br&gt;int main(int argc, char** argv)&lt;br&gt;&#123;&lt;br&gt;    struct event_base *evbase = NULL;&lt;br&gt;    struct evhttp *evhttp = NULL;&lt;br&gt;    unsigned short port = 9000;&lt;br&gt;    const char *host = &quot;127.0.0.1&quot;;&lt;br&gt;&lt;br&gt;    evbase = event_init();&lt;br&gt;    evhttp_set_gencb(evhttp, &amp;fhttpd_gencb, NULL);&lt;br&gt;    evhttp_bind_socket(evhttp, host, port);&lt;br&gt;    event_base_dispatch(evbase);&lt;br&gt;&lt;br&gt;    evhttp_free(evhttp);&lt;br&gt;    event_base_free(evbase);&lt;br&gt;&lt;br&gt;    return 0;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Он рабочий, можете проверить. Привязывается к localhost:9000&lt;br&gt;Вот кусок кода из evhttp_bind_socket():&lt;br&gt;&lt;br&gt;fd = socket(AF_INET, SOCK_STREAM, 0);&lt;br&gt;r = bind(fd, ai-&amp;gt;ai_addr, ai-&amp;gt;ai_addrlen);&lt;br&gt;&lt;br&gt;Вот способы передачи запроса от nginx:&lt;br&gt;&lt;br&gt;            proxy_pass         http://127.0.0.1:9000/;&lt;br&gt;либо&lt;br&gt;          </description>
</item>

<item>
    <title>bind AF_UNIX AF_INET помогите открыть сокет (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8145.html#1</link>
    <pubDate>Wed, 11 Mar 2009 21:56:06 GMT</pubDate>
    <description>&amp;gt;Как Вы понимаете, ключевое слово производительность. &lt;br&gt;&lt;br&gt;Нет, ключевое слово &quot;каша&quot; :)&lt;br&gt;</description>
</item>

</channel>
</rss>
