<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256576</guid>
        <pubDate>Sun, 03 May 2009 12:35:10 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256576</link>
        <description><![CDATA[Urich: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271471&view=findpost&p=2256473'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>zss &#064; <time class="tag-quote__quoted-time" datetime="2009-05-03T14:35:01+04:00">03.05.09, 10:35</time></span><div class='quote '>ли на каждый коннект свой поток.</div></div><br>
У меня большое сомнения что при реализации сервера как то иначе будет правильно.]]></description>
        <author>Urich</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256477</guid>
        <pubDate>Sun, 03 May 2009 10:52:43 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256477</link>
        <description><![CDATA[BlackEmperor: В общем, вариантов в теме предложили несколько - выбирай :)]]></description>
        <author>BlackEmperor</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256473</guid>
        <pubDate>Sun, 03 May 2009 10:35:01 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256473</link>
        <description><![CDATA[zss: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271471&view=findpost&p=2256433'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>BlackEmperor &#064; <time class="tag-quote__quoted-time" datetime="2009-05-03T09:19:53+00:00">03.05.09, 09:19</time></span><div class='quote '>Вспомнилось...<br>
Есть такая идея, реализованная уже в какой-то системе одного моего коллеги дааавно, ты не держишь коннект клиента, а при при первом подключении клиенту даешь некий идентификатор сессии, и закрываешь соединение, отдав этот ид клиенту (своего рода вирт хэндл). Клиент при каждом обращении к серверу передает этот идентификатор сессии на сервер и по нему выполняет операцию. Итог: один запрос один коннект и закрытие коннекта, а каждый запрос, начиная со второго, идет с полученным ид сессии. На сервере периодически чистишь идешники сессий, скажем по принципу не было ни одного запроса с неким ид за некий таймаут. И получаешь некие своего рода датаграммы на TCP соединениях :) управляемые идентификаторами сессии</div></div><br>
ну тут конечно можно не изобретать велосипед.<br>
Ли использовать модель сетевых событий, ли на каждый коннект свой поток. Но придется все-равно хранить идентификаторы для корректного завершения соединений.]]></description>
        <author>zss</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256433</guid>
        <pubDate>Sun, 03 May 2009 09:19:53 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256433</link>
        <description><![CDATA[BlackEmperor: Вспомнилось...<br>Есть такая идея, реализованная уже в какой-то системе одного моего коллеги дааавно, ты не держишь коннект клиента, а при при первом подключении клиенту даешь некий идентификатор сессии, и закрываешь соединение, отдав этот ид клиенту (своего рода вирт хэндл). Клиент при каждом обращении к серверу передает этот идентификатор сессии на сервер и по нему выполняет операцию. Итог: один запрос один коннект и закрытие коннекта, а каждый запрос, начиная со второго, идет с полученным ид сессии. На сервере периодически чистишь идешники сессий, скажем по принципу не было ни одного запроса с неким ид за некий таймаут. И получаешь некие своего рода датаграммы на TCP соединениях :) управляемые идентификаторами сессии :)]]></description>
        <author>BlackEmperor</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256428</guid>
        <pubDate>Sun, 03 May 2009 09:11:26 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256428</link>
        <description><![CDATA[zss: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271471&view=findpost&p=2256419'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>HOMO_PROGRAMMATIS &#064; <time class="tag-quote__quoted-time" datetime="2009-05-03T09:03:55+00:00">03.05.09, 09:03</time></span><div class='quote '>Если такая проблема с тем что малые операции могут долго работатать</div></div><br>
так я и спрашиваю, что лучше - держать описатели или постоянно при каждом запросе создавать новое соединение ?<br>
Тут правда встает вопрос в установке соединения на плохом канале...]]></description>
        <author>zss</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256419</guid>
        <pubDate>Sun, 03 May 2009 09:03:55 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256419</link>
        <description><![CDATA[HOMO_PROGRAMMATIS: Если такая проблема с тем что малые операции могут долго работатать - то держи все же хендлы сокетов и делай им Abort из главного потока если совсем все затянулось, а дальше по тексту. У нас так и делается примерно.]]></description>
        <author>HOMO_PROGRAMMATIS</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256397</guid>
        <pubDate>Sun, 03 May 2009 08:37:46 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256397</link>
        <description><![CDATA[zss: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271471&view=findpost&p=2256387'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>BlackEmperor &#064; <time class="tag-quote__quoted-time" datetime="2009-05-03T08:10:17+00:00">03.05.09, 08:10</time></span><div class='quote '>Даешь некоторое время на закрытие потоку, не закрылся,килишь его. Некрасиво, но четко. Да и все равно сервер на остановку идет </div></div><br>
а если критический код выполняется ? не хотелось бы так. Хочется корректно завершить.<br>
<br>
Можно конечно не держать соединение, при каждом запросе устанавливать новое. Тогда не нужно крутить бесконечный цикл.<br>
Но правильно ли это ?<br>
<br>
То есть тут встает вопрос правильной реализации серверной обработки т.к. я наверное не правильно сделал.]]></description>
        <author>zss</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256387</guid>
        <pubDate>Sun, 03 May 2009 08:10:17 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256387</link>
        <description><![CDATA[BlackEmperor: Даешь некоторое время на закрытие потоку, не закрылся,килишь его. Некрасиво, но четко. Да и все равно сервер на остановку идет]]></description>
        <author>BlackEmperor</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256379</guid>
        <pubDate>Sun, 03 May 2009 07:48:00 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256379</link>
        <description><![CDATA[zss: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271471&view=findpost&p=2256235'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>HOMO_PROGRAMMATIS &#064; <time class="tag-quote__quoted-time" datetime="2009-05-02T19:37:43+00:00">02.05.09, 19:37</time></span><div class='quote '>BlackEmperor прав. ну нельзя закрывать соединения простой ошибкой сокета. А вот понадобится вам передавать клиентам перед завершением какой-то код окончания работы? Опять мучиться будете. Просто действительно сделайте некий флаг завершения работы и в потоках его смотрите.<br>
</div></div><br>
ну у меня так было сделано 100 лет назад. Базовый класс-поток, который ждет соединение в потоке.<br>
Пришло соединение - дергает чисто виртуальный метод. То есть наследник будет сам решать что делать.<br>
<br>
Он как раз крутит бесконечный цикл и выходит с него только при закрытии сокета. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2009-05-03T07:50:31+00:00">03.05.09, 07:50</time></span></span><br>
тут еще один прикол есть. Если соединение не стабильное (например GPRS) и пытаться корректно завершить поток, то можно очень долго ждать его завершения т.к. передача нескольких Кбайт может идти несколько минут (проверено :))]]></description>
        <author>zss</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256235</guid>
        <pubDate>Sat, 02 May 2009 19:37:43 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256235</link>
        <description><![CDATA[HOMO_PROGRAMMATIS: <strong class='tag-b'>BlackEmperor</strong> прав. ну нельзя закрывать соединения простой ошибкой сокета. А вот понадобится вам передавать клиентам перед завершением какой-то код окончания работы? Опять мучиться будете. Просто действительно сделайте некий флаг завершения работы и в потоках его смотрите.]]></description>
        <author>HOMO_PROGRAMMATIS</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256232</guid>
        <pubDate>Sat, 02 May 2009 19:30:51 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256232</link>
        <description><![CDATA[BlackEmperor: Ну и храни в потоке, а еще храни флаг доступный из вне потока, как он скажем false  прерывай поток и закрывай сокет, т.е. не прерывай, а выходи из поточной проц, а поток ессно помрет. А храни глоб тбл флагов для потоков, парами флаг + ид потока, ид понадобиться чтоб периодически чистить тбл от записей потоки которые уже не существуют, это чтоб с каждого потока не лазить в тбл для удалении своей записи при завершении, а с неким таймаутом запускай ф-юю чистки тбл]]></description>
        <author>BlackEmperor</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256224</guid>
        <pubDate>Sat, 02 May 2009 19:19:31 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256224</link>
        <description><![CDATA[zss: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271471&view=findpost&p=2256188'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>BlackEmperor &#064; <time class="tag-quote__quoted-time" datetime="2009-05-02T18:42:07+00:00">02.05.09, 18:42</time></span><div class='quote '>При приходе команды о закрытии сервера, закрываешь серверный слушающий сокет и в цикле пробегаешь по всем сокетам и закрываешь их, а каждая процедура обработки клиентского запроса должна быть прерываема</div></div><br>
для этого их нужно хранить. а я их не храню. Зачем ? пришел клиент - отдал его обрабатывающему потоку и пусть себе там варится.<br>
Как только отвалится - поток сам умрет.]]></description>
        <author>zss</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256188</guid>
        <pubDate>Sat, 02 May 2009 18:42:07 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256188</link>
        <description><![CDATA[BlackEmperor: При приходе команды о закрытии сервера, закрываешь серверный слушающий сокет и в цикле пробегаешь по всем сокетам и закрываешь их,  а каждая процедура обработки клиентского запроса должна быть прерываема (проверять некий флаг и завершать если надо) и ессно в цикле проставляешь флаг на закрытие]]></description>
        <author>BlackEmperor</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256110</guid>
        <pubDate>Sat, 02 May 2009 16:20:06 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256110</link>
        <description><![CDATA[zss: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271471&view=findpost&p=2256102'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Urich &#064; <time class="tag-quote__quoted-time" datetime="2009-05-02T15:57:05+00:00">02.05.09, 15:57</time></span><div class='quote '>Выставлять keepalive в пару минут</div></div><br>
не поможет.<br>
<br>
Смысл в следующем. Сервер запускает поток в котором слушает сокет. Если состоялось соединение то от вызывает синхронный метод обработки соединения.<br>
<br>
Если происходит остановка сервера, то перед завершением потока происходит закрытие серверного сокета и ожидание завершения потока.<br>
Но если в данный момент есть клиентское соединение, то завершение потока приходится ждать пока клиент не отключится.<br>
Поэтому хотелось бы закрывать не только серверный сокет, но и все ассоциированный с ним соединения.]]></description>
        <author>zss</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256102</guid>
        <pubDate>Sat, 02 May 2009 15:57:05 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256102</link>
        <description><![CDATA[Urich: <strong class='tag-b'>zss</strong><br>
Выставлять keepalive в пару минут.]]></description>
        <author>Urich</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256096</guid>
        <pubDate>Sat, 02 May 2009 15:36:14 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256096</link>
        <description><![CDATA[zss: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271471&view=findpost&p=2256093'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Urich &#064; <time class="tag-quote__quoted-time" datetime="2009-05-02T15:33:11+00:00">02.05.09, 15:33</time></span><div class='quote '>акой то абстрактный вопрос. Это логическая задача? </div></div><br>
практическая]]></description>
        <author>zss</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256093</guid>
        <pubDate>Sat, 02 May 2009 15:33:11 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256093</link>
        <description><![CDATA[Urich: <strong class='tag-b'>zss</strong><br>
Какой то абстрактный вопрос. Это логическая задача?]]></description>
        <author>Urich</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256055</guid>
        <pubDate>Sat, 02 May 2009 14:14:37 +0000</pubDate>
        <title>закрыть соединения</title>
        <link>https://forum.sources.ru/index.php?showtopic=271471&amp;view=findpost&amp;p=2256055</link>
        <description><![CDATA[zss: на сервере на accept создаются соединения.<br>при завершении работы серверного приложения хотелось бы закрыть соединения ассоциированные с серверным сокетом.<br>Т.к. сами соединения (сокеты) не хранятся на сервере, то сделать им closesocket нет возможности.<br><br>Можно ли как закрыть все соединения ассоциированные с серверным сокетом ?]]></description>
        <author>zss</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	