<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: C++ listen tcp socket</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/9245.html</link>
    <description>Здравствуйте!&lt;br&gt;Задача:&lt;br&gt;Создать приложение демон-процесс, слушающий и обрабатывающий запросы к TCP порту основанные на HTTP, выдающий в результате обработки запроса HTML-контент взятый из базы данных mysql, выполняющий перекодирование выдаваемого контента в желаемую/затребованную кодировку, которая устанавливается либо в самом запросе, либо в настройках его инициализационных параметров.&lt;br&gt;К сожалению, никогда не писал С++ программ для работы в сети, поэтому не представляю себе, что и в какой последовательности работает.&lt;br&gt;Я написал следующую программу:&lt;br&gt;&lt;br&gt;int main (int argc, char * const argv&#091;&#093;) &#123;&lt;br&gt;struct sockaddr_in addr_info;&lt;br&gt;int add_len = sizeof(addr_info);&lt;br&gt;int ret_addr, sock_id;&lt;br&gt;char* buf = new char&#091;256&#093;;&lt;br&gt;&lt;br&gt;bzero(&amp;addr_info, sizeof(addr_info));&lt;br&gt;addr_info.sin_family = AF_INET;&lt;br&gt;addr_info.sin_port = 8080;&lt;br&gt;addr_info.sin_addr.s_addr = INADDR_ANY;&lt;br&gt;&lt;br&gt;sock_id = socket(AF_INET, SOCK_STREAM, 0);&lt;br&gt;if (sock_id==-1) &#123;cout&amp;lt;&amp;lt; &quot;Error create socket&#092;n&quot;; return -1;&#125;&lt;br&gt;if (bind(sock_id, (struct sockaddr*)&amp;ad</description>

<item>
    <title>C++ listen tcp socket (Аноним)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/9245.html#41</link>
    <pubDate>Thu, 27 Oct 2011 01:42:20 GMT</pubDate>
    <description>&amp;gt;&amp;gt; А кто умеет то? Я ничо мне интересно просто...&lt;br&gt;&amp;gt; Как минимум все BSD семейство и AIX, ну и если верить манам &lt;br&gt;&amp;gt; HPUX (сам про него хз) &lt;br&gt;&lt;br&gt;Чёто ты кривого чешешь! :)Ссылочку кинь?&lt;br&gt;</description>
</item>

<item>
    <title>C++ listen tcp socket (guest)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/9245.html#40</link>
    <pubDate>Thu, 20 Oct 2011 17:12:30 GMT</pubDate>
    <description>&amp;gt; А кто умеет то? Я ничо мне интересно просто...&lt;br&gt;&lt;br&gt;Как минимум все BSD семейство и AIX, ну и если верить манам HPUX (сам про него хз)&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>C++ listen tcp socket (mesmeridze)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/9245.html#39</link>
    <pubDate>Thu, 20 Oct 2011 13:44:15 GMT</pubDate>
    <description>&amp;gt;&amp;gt; То есть, тот факт, что два разные программы, процессы, нити,..., не могут &lt;br&gt;&amp;gt;&amp;gt; слушать &lt;br&gt;&amp;gt;&amp;gt; один и тот же порт, вам не известен?  Где Вы говорите &lt;br&gt;&amp;gt; То что этого не умеет ванильный линукс, вовсе не значит, что этого &lt;br&gt;&amp;gt; не умеют другие системы.&lt;br&gt;&lt;br&gt;А кто умеет то? Я ничо мне интересно просто...&lt;br&gt;</description>
</item>

<item>
    <title>C++ listen tcp socket (handler2006)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/9245.html#38</link>
    <pubDate>Wed, 19 Oct 2011 09:10:38 GMT</pubDate>
    <description>Неправильный подход к реализации: я запускал процесс из другой программы, а все делается проще:&lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;int main () &#123;&lt;br&gt;if (fork()) exit(0);&lt;br&gt;/* daemon code here*/&lt;br&gt;return 0;&lt;br&gt;&#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;</description>
</item>

<item>
    <title>C++ listen tcp socket (Вова)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/9245.html#37</link>
    <pubDate>Tue, 18 Oct 2011 18:31:10 GMT</pubDate>
    <description> &lt;br&gt;&amp;gt; И почему-то указанные выше sock и session на 1 меньше: &lt;br&gt;&amp;gt; sock = socket(...);//3 &lt;br&gt;&amp;gt; session = accept(sock, ...); // 4 &lt;br&gt;&amp;gt; Что тут не так?&lt;br&gt;&lt;br&gt;да, а ведь должно быть меньше на три дескриптора, ведь это демон.&lt;br&gt;</description>
</item>

<item>
    <title>C++ listen tcp socket (handler2006)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/9245.html#36</link>
    <pubDate>Tue, 18 Oct 2011 11:32:13 GMT</pubDate>
    <description>Проблемы с кодировкой наблюдались у меня в случае, когда я делал так:&lt;br&gt;&lt;br&gt;wget google.com/index.html&lt;br&gt;И далее использовал полученный файл, как документ.&lt;br&gt;Если же я самостоятельно напишу документ в текстовом редакторе по всем правилам указания кодировок - таких проблем не возникает.&lt;br&gt;&lt;br&gt;Теперь усложним задачу:&lt;br&gt;Для начала заметим, что значение дескриптора socket и accept в программе:&lt;br&gt;sock = socket(...);//4&lt;br&gt;session = accept(sock, ...); // 5&lt;br&gt;&lt;br&gt;Теперь  запустим нашу программу как демон из другой програмы:&lt;br&gt;if(!fork()) execl(&quot;myprog&quot;, argv);&lt;br&gt;&lt;br&gt;Наша программа успешно запустилась и ждет входящих сообщений, но не обрабатывает их (т.е. по-просту, не работатет).&lt;br&gt;И почему-то указанные выше sock и session на 1 меньше:&lt;br&gt;sock = socket(...);//3&lt;br&gt;session = accept(sock, ...); // 4&lt;br&gt;&lt;br&gt;Что тут не так?&lt;br&gt;</description>
</item>

<item>
    <title>C++ listen tcp socket (handler2006)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/9245.html#35</link>
    <pubDate>Mon, 17 Oct 2011 11:05:02 GMT</pubDate>
    <description>Теперь встал еще один вопрос: Как отправить заголовок браузеру? Т.е.:&lt;br&gt;в php ч/з header(), а в с++ - ?&lt;br&gt;Начнем с самого простого, без чего, якобы, браузер вообще не сможет прочитать содержимое ответа (но, тем не менее, читает) - Content-length:&lt;br&gt;&#091;code&#093;&lt;br&gt;string str = &quot;&amp;lt;html&amp;gt;...&amp;lt;/html&amp;gt;&quot;;&lt;br&gt;string reply = &quot;Content-length: &quot;+str.length();&lt;br&gt;reply+= &quot;&#092;r&#092;n&#092;r&#092;n&quot;; // end of header&lt;br&gt;reply+= str;&lt;br&gt;&#091;/code&#093;&lt;br&gt;Здесь все отлично - браузер отображает содержимое документа, причем сам заголовок в теле документа не отображается.&lt;br&gt;Далее хочу отправить кодировку в документ, т.к. документ у меня в cp-1251, а браузер - в utf-8 (default):&lt;br&gt;Какой же параметр устанавливает кодировку в заголовке?&lt;br&gt;google.com -&amp;gt; http header rfc -&amp;gt; http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html&lt;br&gt;Читаю:&lt;br&gt;14.2 Accept-Charset&lt;br&gt; Accept-Charset: iso-8859-5, unicode-1-1;q=0.8&lt;br&gt;14.17 Content-Type&lt;br&gt; Content-Type: text/html; charset=ISO-8859-4&lt;br&gt;Пишу:&lt;br&gt;&#091;code&#093;&lt;br&gt;string str = &quot;&amp;lt;html&amp;gt;...&amp;lt;/html&amp;gt;&quot;;&lt;br&gt;string reply = &quot;Accept-Charset: cp-1251&quot;; //string reply = &quot;Conte</description>
</item>

<item>
    <title>C++ listen tcp socket (fisher)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/9245.html#34</link>
    <pubDate>Sun, 16 Oct 2011 18:16:06 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;  ret_addr = recv(sock_id, buf, 256, 0); &lt;br&gt;&amp;gt; // ret_addr = accept(sock_id, (struct sockaddr*)&amp;addr_info, (socklen_t*)&amp;add_len); &lt;br&gt;&amp;gt;     return 0; &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&amp;gt; Но я так понимаю, что это совсем не в ту сторону. Единственное, &lt;br&gt;&amp;gt; что тут правильно - это socket().&lt;br&gt;&amp;gt; Пожалуйста, подскажите схему приложения-реализации данной задачи, что за чем следует, &lt;br&gt;&amp;gt; а я постараюсь по Вашей схеме написать реализацию.&lt;br&gt;&amp;gt; Заранее благодарен.&lt;br&gt;&amp;gt; Алексей &lt;br&gt;&lt;br&gt;http://www.opennet.ru/docs/RUS/linux_parallel/node76.html&lt;br&gt;</description>
</item>

<item>
    <title>C++ listen tcp socket (Вова)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/9245.html#33</link>
    <pubDate>Sat, 15 Oct 2011 16:49:17 GMT</pubDate>
    <description>&amp;gt; Если честно - я его вообще не читал. Но раз Вы утверждаете, &lt;br&gt;&amp;gt; что у него есть описание взаимодействия процессов с дескрипторами, я обязательно &lt;br&gt;&amp;gt; посмотрю, что он пишет.&lt;br&gt;&amp;gt; Из прослушанных мною лекций по многопоточности я тоже сделал умозаключение, что используется &lt;br&gt;&amp;gt; счетчик ссылок, но не был в этом уверен. Теперь Вы укрепили &lt;br&gt;&amp;gt; меня в моем мнении. Спасибо.&lt;br&gt;&lt;br&gt;Закрытие дескрипторов при создании дочернего процесса для каждого соединения описано в  главе про разработку серверных приложений по различным моделям книги &quot;Разработка сетевых приложений UNIX&quot;, табличка с влиянием fork/exec/exit на различные ресурсы в отдельном труде &quot;Взаимодействие процессов UNIX&quot;.&lt;br&gt;</description>
</item>

</channel>
</rss>
