<?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=248862&amp;view=findpost&amp;p=2062972</guid>
        <pubDate>Sat, 06 Sep 2008 08:31:39 +0000</pubDate>
        <title>Сокет и ошибка 10038</title>
        <link>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2062972</link>
        <description><![CDATA[DrMort: Переставил винду поверх старой. Глючит. Форматнул винт - нормально. С дровами тоже нормально. Похоже что-то было с операционкой, может какие нить последствия лечения вирусни. Всем спасибо за мысли.]]></description>
        <author>DrMort</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2062435</guid>
        <pubDate>Fri, 05 Sep 2008 11:59:23 +0000</pubDate>
        <title>Сокет и ошибка 10038</title>
        <link>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2062435</link>
        <description><![CDATA[DrMort: Вне среды все равно глючит. Переставил винду - все та же ошибка. Завтра попробую переставить винду и не ставить ни одного драйвера.]]></description>
        <author>DrMort</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2062425</guid>
        <pubDate>Fri, 05 Sep 2008 11:54:59 +0000</pubDate>
        <title>Сокет и ошибка 10038</title>
        <link>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2062425</link>
        <description><![CDATA[Oleg2004: Есть такая ситуация - что в режиме дебага многие среды при тестирование клиент-серверных приложений глючат.<br>Поэтому я всегда рекомендую делать отладочные релизы и запускать как самостоятельные программы вне среды программирования......]]></description>
        <author>Oleg2004</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2062342</guid>
        <pubDate>Fri, 05 Sep 2008 10:26:41 +0000</pubDate>
        <title>Сокет и ошибка 10038</title>
        <link>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2062342</link>
        <description><![CDATA[DrMort: Разорваное соединение остаётся, но никогда не используется. По прошествии некоторого времени по таймеру выбираются все разорваные соединения и удаляются из массива.<br>
Ещё раз - в OnClientDisconnect сокет вообще не трогается - процедура обработчика вообще может быть пустой. И тем более к указателю Connections[i].Socket никто не обращается. Дело все таки несколько в другом.<br>
Про ServerType:=stThreadBlocking мне тоже известно.<br>
Попробовал запустить сервер на другом компе где поднят SQL. Запустилась и нормально работает. Переставил винду. У меня по прежнему глючит. Возможно проблема с каким то драйвером. Мучаю дальше.]]></description>
        <author>DrMort</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2062133</guid>
        <pubDate>Fri, 05 Sep 2008 07:28:43 +0000</pubDate>
        <title>Сокет и ошибка 10038</title>
        <link>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2062133</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=248862&view=findpost&p=2061979'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>DrMort &#064; <time class="tag-quote__quoted-time" datetime="2008-09-05T01:20:44+00:00">05.09.08, 01:20</time></span><div class='quote '>В дисконнекте меняются просто флажки соединений - то есть в массив проставляется что васе пупкину больше ничего отсылать не стоит - мы его потеряли</div></div><br>
И что разорванное соединение так и остается навсегда в массиве Connections или удаляется ? <br>
Следует иметь в виду, что клиентский сокет закрывается и удаляется автоматически после вызова OnClientDisconnect. Поэтому ни закрывать, ни освобождать самому Connections[i].Socket в OnClientDisconnect (и тем более до или после) нельзя, ну и ес-но нельзя обращаться к инвалидному указателю Connections[i].Socket после OnClientDisconnect<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=248862&view=findpost&p=2061979'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>DrMort &#064; <time class="tag-quote__quoted-time" datetime="2008-09-05T01:20:44+00:00">05.09.08, 01:20</time></span><div class='quote '>Программа однопоточная - никаких специальных замутов наподобии CreateThread не делал</div></div><br>
Чтобы прога стало многопоточной достаточно установить &quot;замут&quot; ServerType:=stThreadBlocking ;)]]></description>
        <author>leo</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2061979</guid>
        <pubDate>Fri, 05 Sep 2008 01:20:44 +0000</pubDate>
        <title>Сокет и ошибка 10038</title>
        <link>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2061979</link>
        <description><![CDATA[DrMort: Никаких указателей не перезаписываю. В дисконнекте меняются просто флажки соединений - то есть в массив проставляется что васе пупкину больше ничего отсылать не стоит - мы его потеряли. Программа однопоточная - никаких специальных замутов наподобии CreateThread не делал. Сейчас попробую привести некий кусок кода<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">void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;TCustomWinSocket *Socket)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int CurrentLocation=0,counter=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int NumSym=0,i,o;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;AnsiString CurrName=&quot;&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for(i=0;i&#60;MaxConnections;i++) //MaxConnections - константа содержащая максимальное число соединений с клиентами</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if((Connections[i].Socket==Socket) &amp;&amp; (Connections[i].Connected==true)) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(Connections[i].Login!=&quot;&quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Memo1-&#62;Lines-&#62;Add(Connections[i].Login+&quot; disconnected&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CurrName=Connections[i].Login;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CurrName=CurrName.Trim();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Memo1-&#62;Lines-&#62;Add(&quot;Non logined client disconnected&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Connections[i].Connected=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Connections[i].Autorize=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for(o=0;o&#60;BufferLength;o++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Connections[i].SendBuffer[o]=&quot;&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Connections[i].BufferCounter=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Connections[i].Idle=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Form1-&#62;StatisticMonitor-&#62;Values[&quot;CurrentConnection&quot;]=IntToStr(StrToInt(Form1-&#62;StatisticMonitor-&#62;Values[&quot;CurrentConnection&quot;])-1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}; </div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Connections[] - массив структур содержащий сведения о соединениях, В нём есть поле Socket значение которого заполняется при установке связи.<br>
<br>
Но все это описание зряшное, потомучто содержимое обработчика можно полностью убрать и ничего не изменится - проверено. Так же пробовал в начале каждой процедуры имеющейся в проекте ставить стоп поинт и отслеживать что ещё происходит в момент когда клиент обрывает связь. Так вот ничего не происходит - сразу срабатывает OnClientDisconnect. Сразу после его срабатывания вылетает подряд две ошибки. Так что вероятнее всего дело не в исходном коде, а в настройках/багах проекта/операционной системы/среды программирования. Чуть позже попробую на чистом компе возвести SQL сервер и запустить серверное приложение. Если ошибка исчезнет - всему виной срада/операционка.]]></description>
        <author>DrMort</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2061684</guid>
        <pubDate>Thu, 04 Sep 2008 13:17:36 +0000</pubDate>
        <title>Сокет и ошибка 10038</title>
        <link>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2061684</link>
        <description><![CDATA[Akme: Указатели какие-нить не перезаписываешь? Что в дисконекте делается? Один поток в программе или нет?]]></description>
        <author>Akme</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2061671</guid>
        <pubDate>Thu, 04 Sep 2008 13:09:18 +0000</pubDate>
        <title>Сокет и ошибка 10038</title>
        <link>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2061671</link>
        <description><![CDATA[trainer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=248862&view=findpost&p=2061562'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>DrMort &#064; <time class="tag-quote__quoted-time" datetime="2008-09-04T11:29:36+00:00">04.09.08, 11:29</time></span><div class='quote '>С другой стороны он передаётся в обработчик, так что существовать должен, в дебаге видно даже его настройки.</div></div>Какое отношение обработчик события в компоненте VCL имеет к системному объекту? Системный объект видимо удален, экземпляр компонента остался. Любые попытки использовать системный объект через компонент будут давать ошибки(если компонент не будет самостоятельно пересоздавать системный объект, а он в данном случае не будет пересоздавать).<br>
Ну и исходник покажи.<br>
Хотя вообще-то странно. Не должен на сервере закрываться сокет, находящийся в режиме прослушивания.<br>
<br>
Эээ... Ты закрываешь сокет в OnClientDisconnect?]]></description>
        <author>trainer</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2061562</guid>
        <pubDate>Thu, 04 Sep 2008 11:29:36 +0000</pubDate>
        <title>Сокет и ошибка 10038</title>
        <link>https://forum.sources.ru/index.php?showtopic=248862&amp;view=findpost&amp;p=2061562</link>
        <description><![CDATA[DrMort: День добрый.<br>
Вообщем история такая. Есть два приложения - клиент и сервер. Вообщем всё классически. Трабл такого толка - когда клиент закрывает соединение на сервере сразу же после обработчика события OnClientDisconnect вываливается ошибка:<br>
Windows socket error: Сделана попытка выполнить операцию на объекте, не являющемся сокетом (10038), on API &#39;closesocket&#39;<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="2008-09-04T12:14:16+00:00">04.09.08, 12:14</time></span></span><br>
Прошерстил гугль. Указанная ошибка встречается всего два раза. Оба пальцем в небо.]]></description>
        <author>DrMort</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      </channel>
      </rss>
	