<?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=271665&amp;view=findpost&amp;p=2260122</guid>
        <pubDate>Thu, 07 May 2009 12:40:25 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2260122</link>
        <description><![CDATA[Oleg2004: Хуже нет случайных несистематических ошибок&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;<br>Как их диагностировать то?<br>попробуйте для интереса разнести порты клиента и сервера - скажем 30000 и 50000]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2260031</guid>
        <pubDate>Thu, 07 May 2009 11:21:11 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2260031</link>
        <description><![CDATA[Grad: Еще раз хочу повторить, чтобы меня правильно поняли сказать:<br>Клиент работает без ошибок через раз&#33; Т.е. бывает нормально идут соединения а бывает ошибка.]]></description>
        <author>Grad</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2259909</guid>
        <pubDate>Thu, 07 May 2009 10:00:50 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2259909</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271665&view=findpost&p=2259895'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Grad &#064; <time class="tag-quote__quoted-time" datetime="2009-05-07T09:49:14+00:00">07.05.09, 09:49</time></span><div class='quote '>Я использую только конкретный всегда локальный IP-адрес 127.0.0.1(loopback), безо всяких имен. </div></div><br>
Эта функция к имени не имеет никакого отношения - она возвращает адрес локального сокета, так как он прописан в системе - т.е. должно быть 127.0.0.1 + порт.<br>
И еще - посмотрел вашу картинку......<br>
Может быть, именно то обстоятельство, что работает все через System - т.е. все замыкается через один и тот же модуль IP - это же лупбэк - и для System-процесса реюз не работает?<br>
В общем проблемку вы надыбали непростую...... :blink:]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2259895</guid>
        <pubDate>Thu, 07 May 2009 09:49:14 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2259895</link>
        <description><![CDATA[Grad: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271665&view=findpost&p=2259388'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2009-05-06T16:12:19+00:00">06.05.09, 16:12</time></span><div class='quote '>Первое<br>
У Микрософта многие флаги - BOOL<br>
Но это так, для корректности.....</div></div><br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue">BOOL	<br>
Boolean variable (should be TRUE or FALSE). <br>
This type is declared in WinDef.h as follows:<br>
typedef int BOOL;<br>
или<br>
<span class="tag-color tag-color-named" data-value="green" style="color: green">The optlen parameter should be equal to sizeof(int)</span><br>
</span><br>
<strong class='tag-b'>Но это так, для корректности...</strong><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271665&view=findpost&p=2259388'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2009-05-06T16:12:19+00:00">06.05.09, 16:12</time></span><div class='quote '>Второе.<br>
Установку опции надо делать между soсket() и bind()</div></div><br>
Ну естественно, а где же ей еще быть то?<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271665&view=findpost&p=2259388'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2009-05-06T16:12:19+00:00">06.05.09, 16:12</time></span><div class='quote '>Проверить привязку локального адреса можно с помощью getsockname()</div></div><br>
Я использую только конкретный всегда локальный IP-адрес 127.0.0.1(loopback), безо всяких имен.]]></description>
        <author>Grad</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2259388</guid>
        <pubDate>Wed, 06 May 2009 16:12:19 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2259388</link>
        <description><![CDATA[Oleg2004: Первое<br>
У Микрософта многие флаги - BOOL<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">&nbsp;BOOL bOptVal = TRUE;// MSDN</div><div class="code_line">&nbsp;&nbsp;int bOptLen = sizeof(BOOL);</div><div class="code_line">&nbsp;&nbsp;int iOptVal;</div><div class="code_line">&nbsp;&nbsp;int iOptLen = sizeof(int);</div><div class="code_line">&nbsp;&nbsp;if (setsockopt(Socket, SOL_SOCKET, SO_REUSEADDR, (char*)&amp;bOptVal, bOptLen) != SOCKET_ERROR) </div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;Set SO_REUSEADDR: ON\n&quot;);</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
There are two types of socket options:<strong class='tag-b'> Boolean options that enable or disable a feature or behavior, and options that require an integer value or structure.</strong> To enable a Boolean option, the optval parameter points to a nonzero integer. To disable the option optval points to an integer equal to zero. <strong class='tag-b'>The optlen parameter should be equal to sizeof(int) for Boolean options. For other options, optval points to an integer or structure that contains the desired value for the option, and optlen is the length of the integer or structure.</strong><br>
<br>
Но это так, для корректности.....<br>
<br>
Второе.<br>
Установку опции надо делать между soсket() и bind()<br>
И еще. <br>
Проверить привязку локального адреса можно с помощью getsockname()]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2259150</guid>
        <pubDate>Wed, 06 May 2009 12:21:05 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2259150</link>
        <description><![CDATA[Grad: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271665&view=findpost&p=2258360'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2009-05-05T18:39:00+00:00">05.05.09, 18:39</time></span><div class='quote '>Наверно все-таки нужен код.</div></div><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">int sopt,sopt_size;</div><div class="code_line">...</div><div class="code_line">//проверяю текущее значение SO_REUSEADDR-------------------------------</div><div class="code_line">&nbsp;sopt_size=sizeof(int);</div><div class="code_line">&nbsp;if (getsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&amp;sopt,&amp;sopt_size)!=0)</div><div class="code_line">&nbsp;{</div><div class="code_line">&nbsp;&nbsp;ErrorSocketMessage(&quot;Ошибка getsockopt&quot;);</div><div class="code_line">&nbsp;&nbsp;return;</div><div class="code_line">&nbsp;}</div><div class="code_line">&nbsp;//после этого sopt=0</div><div class="code_line">//----------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">//устанавливаю значение SO_REUSEADDR в 1-------------------------------</div><div class="code_line">&nbsp;sopt=1;</div><div class="code_line">&nbsp;if (setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&amp;sopt,sizeof(int))!=0)</div><div class="code_line">&nbsp;{</div><div class="code_line">&nbsp;&nbsp;ErrorSocketMessage(&quot;Ошибка setsockopt&quot;);</div><div class="code_line">&nbsp;&nbsp;return;</div><div class="code_line">&nbsp;}</div><div class="code_line">//----------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">//проверяю текущее значение SO_REUSEADDR-------------------------------</div><div class="code_line">&nbsp;sopt_size=sizeof(int);</div><div class="code_line">&nbsp;if (getsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&amp;sopt,&amp;sopt_size)!=0)</div><div class="code_line">&nbsp;{</div><div class="code_line">&nbsp;&nbsp;ErrorSocketMessage(&quot;Ошибка getsockopt&quot;);</div><div class="code_line">&nbsp;&nbsp;return;</div><div class="code_line">&nbsp;}</div><div class="code_line">&nbsp;//после этого sopt=1</div><div class="code_line">//----------------------------------------------------------------------</div></ol></div></div></div></div>]]></description>
        <author>Grad</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2258360</guid>
        <pubDate>Tue, 05 May 2009 18:39:00 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2258360</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271665&view=findpost&p=2258112'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Grad &#064; <time class="tag-quote__quoted-time" datetime="2009-05-05T14:58:09+00:00">05.05.09, 14:58</time></span><div class='quote '>Я же пишу, что устанавливаю эту опцию:</div></div><br>
Извините, пропустил видно по невнимательности.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271665&view=findpost&p=2257598'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Grad &#064; <time class="tag-quote__quoted-time" datetime="2009-05-05T04:49:48+00:00">05.05.09, 04:49</time></span><div class='quote '>Клиент должен быть запущен на определенном порту, т.е. вызываю bind.</div></div><br>
Наверно все-таки нужен код.<br>
биндите вы локальный адрес сокета - и для него же должен быть SO_REUSE<br>
Наверно все таки код нужен.<br>
Потому как SO_REUSE работает 100%. И клизм не должно быть.<br>
Единственный вариант - какая-то служба или приложение вдруг тоже захотело сесть на этот порт, пока он в отключке.<br>
Можно поставить где-то 60000 ?<br>
Насчет таймвейта - куча инфы в сети<br>
<a class='tag-url' href='http://www.google.com/search?q=%54%49%4D%45%5F%57%41%49%54' target='_blank'> например</a>]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2258112</guid>
        <pubDate>Tue, 05 May 2009 14:58:09 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2258112</link>
        <description><![CDATA[Grad: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271665&view=findpost&p=2257854'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2009-05-05T10:15:15+00:00">05.05.09, 10:15</time></span><div class='quote '>Значит надо работать с опцией SO_REUSEADDR - или ждать 4 минуты....</div></div><br>
Я же пишу, что устанавливаю эту опцию:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271665&view=findpost&p=2257598'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Grad &#064; <time class="tag-quote__quoted-time" datetime="2009-05-05T04:49:48+00:00">05.05.09, 04:49</time></span><div class='quote '>Дальше я пробую установить в 1 для клиента с помощью setsockopt параметр SO_REUSEADDR, который разрешает - &quot;Allow the socket to be bound to an address which is already in use&quot;. Все равно та же ошибка <strong class='tag-b'>иногда</strong> вылетает&#33;</div></div><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=271665&view=findpost&p=2257854'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2009-05-05T10:15:15+00:00">05.05.09, 10:15</time></span><div class='quote '>после его выключения запись об адресе локального сокета сохраняется в таблице соединений TCP около 4-х минут - состояние TIME_WAIT (в никсах, в винде может меньше</div></div><br>
А вот об этом можно поподробнее. Где хотя бы почитать. Жутко интересно стало&#33; Может быть это можно отключить?<br>
Еще странно то, что, например, сервер может закрывать свой сокет а потом открывать и привязываться к тому же порту без проблем&#33; При этом не создается ни одного соединения с именем процесса [System Process]. То есть как бы для сервера не действует эта политика безопасности. Почему?]]></description>
        <author>Grad</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2257854</guid>
        <pubDate>Tue, 05 May 2009 10:15:15 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2257854</link>
        <description><![CDATA[Oleg2004: Все совершенно справедливо.<br>Так как вы намертво привязали программу клиента к порту (ведь обычно клиент получает динамический порт от системы), после его выключения запись об адресе локального сокета сохраняется в таблице соединений TCP около 4-х минут - состояние TIME_WAIT (в никсах, в винде может меньше :D )<br>Значит надо работать с опцией SO_REUSEADDR - или ждать 4 минуты.... :)]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2257709</guid>
        <pubDate>Tue, 05 May 2009 07:11:08 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2257709</link>
        <description><![CDATA[HOMO_PROGRAMMATIS: Код в студию.]]></description>
        <author>HOMO_PROGRAMMATIS</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2257598</guid>
        <pubDate>Tue, 05 May 2009 04:49:48 +0000</pubDate>
        <title>Windows BUG(socket error: WSAEADDRINUSE(10048)) или я что-то не так делаю?</title>
        <link>https://forum.sources.ru/index.php?showtopic=271665&amp;view=findpost&amp;p=2257598</link>
        <description><![CDATA[Grad: Привет. Пытаюсь сделать простого клиента, который подсоединяется к серверу. Клиент должен быть запущен на определенном порту, т.е. вызываю bind.<br>
Сервер привязывается к 127.0.0.1:7777 а клиент к 127.0.0.1:7778. Система WinXP SP3.<br>
<br>
И вот какая странная штука получается: клиент работает без ошибок через раз&#33; Т.е. бывает нормально идут соединения а бывает следующая ошибка: когда я подсоединяюсь к серверу, то первый раз все работает отлично (и bind, и connect), клиент и сервер обмениваются сообщениями. После этого клиент завершается и обязательно вызывается WSACleanup и даже не нужный для Windows Sockets 2 WSACancelBlockingCall(на всякий случай)&#33; И когда я снова пытаюсь подсоединится к серверу вылетает следующая ошибка <span class="tag-color tag-color-named" data-value="red" style="color: red">WSAEADDRINUSE(10048)(Обычно разрешается одно использование адреса сокета)</span>.<br>
<img class='tag-img' src='http://xmages.net/out.php/i209293_wsaeaddrinuse.png' alt='user posted image'><br>
Причем странно, что это ошибка вылезает после вызова connect, хотя перед этим вызов bind происходит без ошибки&#33;? Даже когда полностью закрываешь приложение клиента все равно вылезает ошибка.<br>
<br>
Я решил посмотреть какие коннекты есть в системе и выяснилось, что после того как сервер и клиент обменяются информацией и оба закроют сокеты в системе остается соединение с именем процесса <strong class='tag-b'>[System Process]</strong> и остальными данными точно такими же как и у акцептованного сервером сокета (входящее с 127.0.0.01:7778 на 127.0.0.01:7777).<br>
<img class='tag-img' src='http://xmages.net/out.php/i209292_systemprocess.png' alt='user posted image'><br>
Это соединение через пару минут пропадает и странно, что OutpostFirewall его не видит вообще. Я поначалу думал, что это из-за фаерволла, но отключив его да и антивирус вдобавок, убедился, что ошибка все равно возникает.<br>
<br>
Дальше я пробую установить в 1 для клиента с помощью setsockopt параметр SO_REUSEADDR, который разрешает - &quot;Allow the socket to be bound to an address which is already in use&quot;. Все равно та же ошибка вылетает&#33;<br>
<br>
Далее я пробую разные версии библиотеки Windows Sockets DLL от 1 до 2.2.  Все равно та же ошибка&#33;<br>
<br>
Странно также, что сервер запускается и останавливается без проблем без оставления каких-либо соединений с именем [System Process]. Это соединение остается в системе на некоторое время только когда происходит операция accept сервера для клиента, т.е. когда сервер создает параллельное соединение(входящее с 127.0.0.1:7778 на 127.0.0.0.1:7777). Т.е. получается как бы именно этот сокет &quot;превращается&quot; в [System Process] после того как и клиент, и сервер закрывают свои сокеты. Причем даже при закрытии приложения сервера все равно остается в системе на некоторое время(3-4 мин.).<br>
<br>
Может кто сталкивался с проблемой? Понимаю, что если клиент и сервер будут на разных компьютерах, то проблеиы в принципе не будет. Также если не использовать bind для клиента, то все вроде бы работает, но эти [System Process] остаются для каждого коннекта клиента акцептованного сервером, просто порты назначаются каждый раз новые и ошибки WSAEADDRINUSE не происходит.<br>
<br>
PS: Т.е. получается система как бы блокирует порт, который использовался для соединений на какое-то время&#33; Но Брандмауэр Windows отключен...]]></description>
        <author>Grad</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      </channel>
      </rss>
	