<?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=401578&amp;view=findpost&amp;p=3644751</guid>
        <pubDate>Tue, 29 Dec 2015 22:22:58 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3644751</link>
        <description><![CDATA[MSovenok: мож сам телек как то надо прописать в маршрутезаторе?]]></description>
        <author>MSovenok</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3597168</guid>
        <pubDate>Thu, 30 Apr 2015 21:06:21 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3597168</link>
        <description><![CDATA[Fr0sT: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596953'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-30T08:11:29+00:00">30.04.15, 08:11</time></span><div class='quote '>я не предлагал использовать замшелые   механизмы</div></div><br>
Ну да, а функция упомянулась просто так, до кучи<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596953'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-30T08:11:29+00:00">30.04.15, 08:11</time></span><div class='quote '>рассмотрел два варианта возможной идеологии решения этой проблемы.</div></div><br>
Это асинхронное выполнение в отдельном треде - вариант? Ну, формально и гланды можно удалять через анус, никто не запрещает, но...<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596953'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-30T08:11:29+00:00">30.04.15, 08:11</time></span><div class='quote '>И самое главное, я вам показал, что изменить внутренний таймаут коннекта внешними способами нет никакой возможности. Разве что написать свой собственный вариант этой функции и интегрировать его в АПИ.</div></div><br>
Чудесно&#33; Теперь остается выяснить, с какой целью доказывались очевидные вещи.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596953'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-30T08:11:29+00:00">30.04.15, 08:11</time></span><div class='quote '>По поводу вреда.<br>
Я нигде не писал о том, что ваш способ вреден. Он просто коряв - ИМХО.<br>
Потому как практически равносилен простому нажатию крестика на закладке, которая долго коннектится.</div></div><br>
&quot;Брутально-кривой нонсенс&quot; &lt;&gt; &quot;Мне кажется, этот способ корявый&quot;<br>
<br>
В общем, ТС спрашивал - я привел код, который делает то, что нужно. И он в самом деле это делает, невзирая на возражения пуристов. И если альтернативой насильственному закрытию сокета будет томительное и никак не контролируемое ожидание результата соединения - то я лично не буду проливать слезы по грубому вмешательству в тонкую душевную организацию сокета во время интимного процесса установки коннекта. Чего и всем остальным советую.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596953'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-30T08:11:29+00:00">30.04.15, 08:11</time></span><div class='quote '>Так что считаю дальнейшие препирания по этому поводу неуместными.</div></div><br>
Adios&#33;]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596953</guid>
        <pubDate>Thu, 30 Apr 2015 08:11:29 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596953</link>
        <description><![CDATA[Oleg2004: Если бы вы внимательно читали мои посты, то поняли, что я <strong class='tag-b'>не предлагал</strong> использовать замшелые :D  механизмы, а рассмотрел два варианта возможной идеологии решения этой проблемы.<br>
Это - раз. И самое главное, я вам показал, что изменить внутренний таймаут коннекта внешними способами нет никакой возможности. Разве что написать свой собственный вариант этой функции и интегрировать его в АПИ.<br>
По поводу вреда.<br>
Я нигде не писал о том, что ваш способ вреден. Он просто коряв - ИМХО.<br>
Потому как практически равносилен простому нажатию крестика на закладке, которая долго коннектится.<br>
Так что считаю дальнейшие препирания по этому поводу неуместными.]]></description>
        <author>Oleg2004</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596949</guid>
        <pubDate>Thu, 30 Apr 2015 08:00:17 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596949</link>
        <description><![CDATA[Fr0sT: Неподдерживаемые замшелые механизмы ничем не лучше закрытия во время коннекта, тем более, что насчет гипотетического вреда последнего убедительных доводов не приведено.]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596889</guid>
        <pubDate>Wed, 29 Apr 2015 18:11:09 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596889</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596867'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T16:20:08+00:00">29.04.15, 16:20</time></span><div class='quote '>20 лет тому назад и через 20h многое делали, но это же не значит, что так надо делать сейчас.<br>
Можно поспорить: провести опрос, кто из здешних вообще знает про такую функцию. Я уж не говорю про применение в проектах.</div></div><br>
Никто - и я тоже - не станет утверждать что такое надо делать сейчас. Есть нормальные асинхронные функции в АПИ сокетов, вот их и надо использовать. <br>
Но идея прерывания исполнения коннекта есть нонсенс. Вот и все что я хочу сказать по этому поводу.<br>
Весь остальной разговор на эту тему считаю просто троллингом.]]></description>
        <author>Oleg2004</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596867</guid>
        <pubDate>Wed, 29 Apr 2015 16:20:08 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596867</link>
        <description><![CDATA[Fr0sT: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596859'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T15:25:42+00:00">29.04.15, 15:25</time></span><div class='quote '>Если так ставить проблему - то такое решение имеет право на существование.<br>
Но оно - такое решение - брутально-кривое. Увы.</div></div><br>
Чем?<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596859'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T15:25:42+00:00">29.04.15, 15:25</time></span><div class='quote '>Я с этой функцией работал еще лет 20 тому назад.</div></div><br>
20 лет тому назад и через 20h многое делали, но это же не значит, что так надо делать сейчас.<br>
Можно поспорить: провести опрос, кто из здешних вообще знает про такую функцию. Я уж не говорю про применение в проектах.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596859'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T15:25:42+00:00">29.04.15, 15:25</time></span><div class='quote '>Насчет селекта я писал уже как то давно на нашем форуме. Так что повторяться не буду.</div></div><br>
Неубедительно<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596859'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T15:25:42+00:00">29.04.15, 15:25</time></span><div class='quote '>А цикл - жрет процессорное время и в результате эффект от автономного исполнения функции чисто в неблокирующем режиме нивелируется. Но для расточительных такое вполне приемлемо.</div></div><br>
Это одна-то итерация раз в 50 мс жрет? Не смешите мои тапочки.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596859'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T15:25:42+00:00">29.04.15, 15:25</time></span><div class='quote '>Не проблема. Любой адекватный пользователь знает что поведение сети непредсказуемо, и если одна закладка броузера тупит, делаем другую и работаем с другим сервером, пока не установится соединение или нас не пошлют. <br>
Такова селяви однако. Никто не знает, когда установится соединение - &quot;моментально&quot;, через 5 сек., через 15 сек или вообще не пройдет. Нетерпеливых просим не беспокоиться. </div></div><br>
Это вообще без комментариев, по-моему, именно по такому принципу создавалась сетевая часть IE6, который на диалапе мог свести с ума минут за десять.]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596859</guid>
        <pubDate>Wed, 29 Apr 2015 15:25:42 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596859</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596664'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T08:58:57+00:00">29.04.15, 08:58</time></span><div class='quote '>&quot;неблокирующий&quot; сокет - в просторечии сокет в неблокирующем режиме.</div></div><br>
Ну вот, уже точнее :) <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596664'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T08:58:57+00:00">29.04.15, 08:58</time></span><div class='quote '>А мне плевать на &quot;исполнение коннекта&quot; именно данного конкретного сокета. </div></div><br>
Если так ставить проблему - то такое решение имеет право на существование.<br>
Но оно - такое решение - брутально-кривое. Увы.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596664'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T08:58:57+00:00">29.04.15, 08:58</time></span><div class='quote '>Не помешает почитать справку по этой функции</div></div><br>
Я с этой функцией работал еще лет 20 тому назад. Так что уверяю вас, что в курсе.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596664'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T08:58:57+00:00">29.04.15, 08:58</time></span><div class='quote '>Вообще вся эта система хуков на сокетах какой-то странный неуклюжий, коряво прикрученный костыль. Неудивительно, что его отправили на свалку истории.</div></div><br>
Ну, положим система хуков работает до сих пор в каждой винде.<br>
А то что функция поддерживается только для обратной совместимости - да такое есть. Но кривые задачи обычно криво и решаются, через другое место.<br>
Насчет селекта я писал уже как то давно на нашем форуме. Так что повторяться не буду.<br>
А цикл - жрет процессорное время и в результате эффект от автономного исполнения функции чисто в неблокирующем режиме нивелируется. Но для расточительных такое вполне приемлемо.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596664'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T08:58:57+00:00">29.04.15, 08:58</time></span><div class='quote '>В таком случае желаю всегда сидеть под браузером, подвисающим на полторы минуты для каждого коннекта, ибо сервер недоступен,</div></div><br>
Не проблема. Любой адекватный пользователь знает что поведение сети непредсказуемо, и если одна закладка броузера тупит, делаем другую и работаем с другим сервером, пока не установится соединение или нас не пошлют. <br>
Такова селяви однако. Никто не знает, когда установится соединение - &quot;моментально&quot;, через 5 сек., через 15 сек или вообще не пройдет. Нетерпеливых просим не беспокоиться. :yes:]]></description>
        <author>Oleg2004</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596754</guid>
        <pubDate>Wed, 29 Apr 2015 11:39:39 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596754</link>
        <description><![CDATA[^D^ima: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596630'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-29T06:45:29+00:00">29.04.15, 06:45</time></span><div class='quote '><strong class='tag-b'>^D^ima</strong><br>
Вы неправы. :) <br>
Пинг лишь определяет что компутер включен в сеть и на нем функционирует стек TCP/IP<br>
Отвечает модуль ICMP, который к никакому серверу не имеет отношения.</div></div><br>
Формально вы правы, но это решит проблему &quot;при подключении к хосту, <span class="tag-color tag-color-named" data-value="red" style="color: red">который не работает</span>&quot;]]></description>
        <author>^D^ima</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596664</guid>
        <pubDate>Wed, 29 Apr 2015 08:58:57 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596664</link>
        <description><![CDATA[Fr0sT: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596160'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-28T08:20:03+00:00">28.04.15, 08:20</time></span><div class='quote '>Так лучше программу прибить - крестик справа вверху.</div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596160'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-28T08:20:03+00:00">28.04.15, 08:20</time></span><div class='quote '>Объясняю, что такое так наз. &quot;неблокирующий&quot; сокет. Во первых, неблокирующих сокетов не существует. Сокеты так сокетами и остаются.<br>
Неблокирующими становятся ФУНКЦИИ, которые в противном случае остановили бы исполнение программы на изрядное время.</div></div><br>
Передергивать и буквоедствовать — очень продуктивно, да.<br>
&quot;неблокирующий&quot; сокет - в просторечии сокет в неблокирующем режиме.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596160'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-28T08:20:03+00:00">28.04.15, 08:20</time></span><div class='quote '>Так лучше программу прибить - крестик справа вверху.</div></div><br>
Придирки не понял. Что ж, раз сокет коннектится - его теперь на трон королевский посадить и пылинки сдувать?<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596160'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-28T08:20:03+00:00">28.04.15, 08:20</time></span><div class='quote '>2. Соглашусь, что в вашем коде вы контролируете время установления соединения, при этом ваш код &quot;висит&quot; на селекте.</div></div><br>
&quot;Висит&quot;, потому что так сделано. Это простейшая обертка над сокетом, в основном для блокирующего режима, но т.к. создатели библиотеки протупили и не сделали штатного средства регулирования таймаута - приходится делать вот такие кунштюки.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Но исполнение селекта в цикле - это уж слишком.</div></div><br>
Аргументы?<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>По сути, как я понял (а это всегда нелегко - разбираться в чужом коде  )  вы просто возвращаете управление в программу по истечении таймаута - но само исполнение коннекта, который теперь работает совершенно автономно - вы прекратить не можете. <br>
Кроме как убить сокет.</div></div><br>
А мне плевать на &quot;исполнение коннекта&quot; именно данного конкретного сокета. Что там происходит унутрях сетевого драйвера, какие хэндшейки и ожидания - меня никоим образом не заботит. Не прошел коннект за установленное время - прибиваем хэндл, и пусть система сама дочищает оставшиеся хвосты. В любом случае повлиять на этот процесс никто не может, т.ч. и думать про него нет смысла.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596160'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-28T08:20:03+00:00">28.04.15, 08:20</time></span><div class='quote '>Думаю что в таком случае в Винапи и была придумана функция WSACancelBlockingCall().</div></div><br>
Не помешает почитать справку по этой функции<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596160'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-28T08:20:03+00:00">28.04.15, 08:20</time></span><div class='quote '>Вот   здесь есть кое-что</div></div><br>
Ага, прекрасная подборка: &quot;not working&quot;, &quot;doesn&#39;t work&quot;, etc  :lool: <br>
Вообще вся эта система хуков на сокетах какой-то странный неуклюжий, коряво прикрученный костыль. Неудивительно, что его отправили на свалку истории.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3596160'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-28T08:20:03+00:00">28.04.15, 08:20</time></span><div class='quote '> В общем, заморачиваться по этому поводу :&quot;таймаут в минуту - суровое испытание нервов юзера)?&quot; - я не вижу абсолютно никакого смысла. Пусть юзверь понимает, что есть вещи, с которыми мы обязаны сосуществовать.</div></div><br>
Отлично&#33; В таком случае желаю всегда сидеть под браузером, подвисающим на полторы минуты для каждого коннекта, ибо сервер недоступен, а есть вещи, &quot;с которыми юзеры обязаны сосуществовать&quot;. А еще чтобы ping тоже по такому принципу работал. И мессенджеры.]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596630</guid>
        <pubDate>Wed, 29 Apr 2015 06:45:29 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596630</link>
        <description><![CDATA[Oleg2004: <strong class='tag-b'>^D^ima</strong><br>
Вы неправы. :) <br>
Пинг лишь определяет что компутер включен в сеть и на нем функционирует стек TCP/IP<br>
Отвечает модуль ICMP, который к никакому серверу не имеет отношения.]]></description>
        <author>Oleg2004</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596244</guid>
        <pubDate>Tue, 28 Apr 2015 11:48:56 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596244</link>
        <description><![CDATA[^D^ima: <strong class='tag-b'>Nagva27</strong><br>
Можно пропинговать сервер и если нет ответа не выполнять соединение сокетом.]]></description>
        <author>^D^ima</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596160</guid>
        <pubDate>Tue, 28 Apr 2015 08:20:03 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3596160</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3595978'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2015-04-27T12:53:33+00:00">27.04.15, 12:53</time></span><div class='quote '>Closesocket справится.</div></div><br>
Интересная мысль :) <br>
Так лучше программу прибить - крестик справа вверху.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3595978'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2015-04-27T12:53:33+00:00">27.04.15, 12:53</time></span><div class='quote '>Какой-то странный набор букв. Зачем поток, если сокет и так неблокирующий? Зачем убивать поток, если есть корректный способ завершения? Зачем ждать, пока коннект соизволит отвалиться сам (таймаут в минуту - суровое испытание нервов юзера)?</div></div><br>
Какой-то странный набор букв. &lt;_&lt; <br>
1. зачем поток. Объясняю, что такое так наз. &quot;неблокирующий&quot; сокет. Во первых, неблокирующих сокетов не существует. Сокеты так сокетами и остаются.<br>
Неблокирующими становятся ФУНКЦИИ, которые в противном случае остановили бы исполнение программы на изрядное время.<br>
2. Соглашусь, что в вашем коде вы контролируете время установления соединения, при этом ваш код &quot;висит&quot; на селекте. Но исполнение селекта в цикле - это уж слишком. По сути, как я понял (а это всегда нелегко - разбираться в чужом коде :) )  вы просто возвращаете управление в программу по истечении таймаута - но само исполнение коннекта, который теперь работает совершенно автономно - вы прекратить не можете. <br>
Кроме как убить сокет.<br>
Думаю что в таком случае в Винапи и была придумана функция WSACancelBlockingCall(). <br>
Тогда коннект исполняется как блокирующий в другом потоке.<br>
Вот <a class='tag-url' href='https://groups.google.com/forum/#%21search/how%2420WSACancelBlockingCall%2420is%2420working' target='_blank'>  здесь </a>есть кое-что, и что интересно - ни одного примера с коннектом. Потому как это неизбежно - время на рукопожатие.<br>
3. В общем, заморачиваться по этому поводу :&quot;таймаут в минуту - суровое испытание нервов юзера)?&quot; - я не вижу абсолютно никакого смысла. Пусть юзверь понимает, что есть вещи, с которыми мы обязаны сосуществовать. :yes:]]></description>
        <author>Oleg2004</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3595978</guid>
        <pubDate>Mon, 27 Apr 2015 12:53:33 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3595978</link>
        <description><![CDATA[Fr0sT: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3593375'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-17T17:12:19+00:00">17.04.15, 17:12</time></span><div class='quote '>Вы невластны над внутреним таймаутом функции connect()</div></div><br>
Зато я властен прибить его в любое время<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3593375'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-17T17:12:19+00:00">17.04.15, 17:12</time></span><div class='quote '>прекратить исполнение connect() вы не сможете</div></div><br>
Closesocket справится.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3593661'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-18T18:36:22+00:00">18.04.15, 18:36</time></span><div class='quote '>Так что идея в общем то проста - надо исполнять неблокирующий коннект в отдельном предназначенном для этого потоке и через select() (смотрите  здесь к примеру) убивать этот поток вместе с функцией если не хотите долго ждать.</div></div><br>
Какой-то странный набор букв. Зачем поток, если сокет и так неблокирующий? Зачем убивать поток, если есть корректный способ завершения? Зачем ждать, пока коннект соизволит отвалиться сам (таймаут в минуту - суровое испытание нервов юзера)?<br>
Короче, вот кусок моего класса<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;WaitIntrv &nbsp;= 50; &nbsp; // [msec] wait for socket to be ready</div><div class="code_line">&nbsp;&nbsp;SleepIntrv = 100; &nbsp;// [msec] wait between state check attempts</div><div class="code_line">...</div><div class="code_line">try</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Establish connection using non-blocking mode (to be able to respect specified Timeout )</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;elapse := FTimeout;</div><div class="code_line">&nbsp;&nbsp;if SleepIntrv &#60; FTimeout</div><div class="code_line">&nbsp;&nbsp; &nbsp;then currsleep := SleepIntrv</div><div class="code_line">&nbsp;&nbsp; &nbsp;else currsleep := FTimeout;</div><div class="code_line">&nbsp;&nbsp;OldBlocking := Blocking;</div><div class="code_line">&nbsp;&nbsp;Blocking := False;</div><div class="code_line">&nbsp;&nbsp;if WinSock.connect(FSckt, pAddr^, SizeOf(TSockAddr)) = SOCKET_ERROR then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;// connect error?</div><div class="code_line">&nbsp;&nbsp; &nbsp;CheckWSResult(WSAGetLastError = WSAEWOULDBLOCK, &#39;connect&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;// else - connect in process - repeat checking socket state</div><div class="code_line">&nbsp;&nbsp; &nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if elapse &#60;= 0 then &nbsp;// time is out</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WSASetLastError(WSAETIMEDOUT);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CheckWSResult(False, &#39;connect&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FD_ZERO(Wfd);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FD_SET(FSckt, Wfd);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FD_ZERO(EFd);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FD_SET(FSckt, Efd);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;TimeVal.tv_sec := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;TimeVal.tv_usec := WaitIntrv;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// check socket state</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;res := select(0, nil, @Wfd, @Efd, @TimeVal);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CheckWSResult(res &#60;&#62; SOCKET_ERROR, &#39;select&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case res of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// not ready - wait</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;0: begin Sleep(currsleep); Dec(elapse, currsleep); end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// ready - check result</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;1: if FD_ISSET(FSckt, Efd) then &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // error - get error code and exit</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Len := SizeOf(err);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if getsockopt(FSckt, SOL_SOCKET, SO_ERROR, @err, Len) = SOCKET_ERROR then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; err := WSAECONNREFUSED;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WSASetLastError(err);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CheckWSResult(False, &#39;connect&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if FD_ISSET(FSckt, Wfd) then Break &nbsp;// OK - finish the loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// smth else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CheckWSResult(False, &#39;select&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end; // case</div><div class="code_line">&nbsp;&nbsp; &nbsp;until False;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;Blocking := OldBlocking;</div><div class="code_line">&nbsp;&nbsp;FActive := True;</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;except &nbsp; // error - close socket</div><div class="code_line">&nbsp;&nbsp; &nbsp;err := WSAGetLastError;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Close;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSASetLastError(err);</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise;</div><div class="code_line">&nbsp;&nbsp;end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-04-27T13:01:18+00:00">27.04.15, 13:01</time></span></span><br>
Очевидно, на время ожидания таймаута основной поток &quot;зависнет&quot;, что можно решить, размазав логику (напр., выполнять проверки по таймеру, естественно, уже без Sleep), либо вынеся сокет в отдельный тред, либо совсем кардинально - перейдя на асинхронную модель. Для числа одновременных коннектов &lt;= 10 асинхронка - оверкилл, легче и проще задействовать треды. К тому же синхронку можно довольно легко реализовать самому на Winapi, а вот асинхронку лучше делать на испытанных библиотеках, поскольку режим имеет приличные подводные камни и просто глюки, и при создании собственного велосипеда нарываться на каждый из них будет неприятно.]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593661</guid>
        <pubDate>Sat, 18 Apr 2015 18:36:22 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593661</link>
        <description><![CDATA[Oleg2004: Основная идея исполнения асинхронных функций в Виндовсе типа например WSAAsyncGetHostByName() заключается в том что просто выполняется тот же самый стандартный GetHostByName() - но он выполняется в ОТДЕЛЬНОМ потоке. А вот поток может быть остановлен из главного потока - TerminateThread(). Это основной способ в винде прервать исполнение асинхронной функции. Так что идея в общем то проста - надо исполнять неблокирующий коннект в отдельном предназначенном для этого потоке и через select() (смотрите <a class='tag-url' href='http://www.delphimaster.net/view/6-1162398489' target='_blank'> здесь</a> к примеру) убивать этот поток вместе с функцией если не хотите долго ждать. Я бы лично это не приветствовал - такое поведение коннекта для него родное. Что делать, лучше подождать, когда сам коннект скажет - баста, не хочу.]]></description>
        <author>Oleg2004</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593622</guid>
        <pubDate>Sat, 18 Apr 2015 15:23:34 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593622</link>
        <description><![CDATA[Nagva27: <strong class='tag-b'>Oleg2004</strong>, так и что же можно сделать?]]></description>
        <author>Nagva27</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593375</guid>
        <pubDate>Fri, 17 Apr 2015 17:12:19 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593375</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3593303'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2015-04-17T13:56:19+00:00">17.04.15, 13:56</time></span><div class='quote '>1. Перевести в неблок<br>
2. Цикл проверки состояния через select + sleep <strong class='tag-b'>на маленький интервал перед следующей итерацией</strong><br>
3. При превышении общего времени ожидания - выход по таймауту<br>
4. Перевести обратно в блок<br>
5. ???<br>
6. PROFIT&#33; </div></div><br>
Вы невластны над внутреним таймаутом функции connect().   :) <br>
Время посылки повторного сегмента S для RTO рассчитывается по специальной формуле в зависимости от RTT.<br>
И если даже вы сделаете все как вы пишите в общем то правильно, прекратить исполнение connect() вы не сможете. <br>
Да, вы сможете вернуться в основную программу по таймауту select(), но connect() все равно будет пытаться соединиться - потому как поставлена в неблокирующее состояние. В винде специально раньше использовалась функция WSACancelBlockingCall() - для этой цели.]]></description>
        <author>Oleg2004</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593303</guid>
        <pubDate>Fri, 17 Apr 2015 13:56:19 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593303</link>
        <description><![CDATA[Fr0sT: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3593189'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-17T06:25:26+00:00">17.04.15, 06:25</time></span><div class='quote '>Вмешаться в этот процесс в дельфях довольно непросто, но возможно.</div></div><br>
1. Перевести в неблок<br>
2. Цикл проверки состояния через select + sleep на маленький интервал перед следующей итерацией<br>
3. При превышении общего времени ожидания - выход по таймауту<br>
4. Перевести обратно в блок<br>
5. ???<br>
6. PROFIT&#33;]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593189</guid>
        <pubDate>Fri, 17 Apr 2015 06:25:26 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593189</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401578&view=findpost&p=3593153'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Nagva27 &#064; <time class="tag-quote__quoted-time" datetime="2015-04-16T20:13:13+00:00">16.04.15, 20:13</time></span><div class='quote '> блокирующем режиме при подключении к хосту, который не работает, - довольно долго ждёт</div></div><br>
Это  совершенно нормальное состояние блокирующего сокета. У функции connect(), которая осуществляет хендшейк, есть внутренний таймаут, величина которого в разных ОС - разная. Например в BSD это 75 секунд, в некоторых Виндах - 45 секунд и тд.<br>
Вмешаться в этот процесс в дельфях довольно непросто, но возможно.]]></description>
        <author>Oleg2004</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593153</guid>
        <pubDate>Thu, 16 Apr 2015 20:13:13 +0000</pubDate>
        <title>Timeout подключения TClientSocket</title>
        <link>https://forum.sources.ru/index.php?showtopic=401578&amp;view=findpost&amp;p=3593153</link>
        <description><![CDATA[Nagva27: Здравствуйте&#33;<br>TClientSocket в блокирующем режиме при подключении к хосту, который не работает, - довольно долго ждёт, перед тем как выбросить исключение. Можно ли сделать так, чтобы он ждал поменьше?]]></description>
        <author>Nagva27</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	