<?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=74367&amp;view=findpost&amp;p=529402</guid>
        <pubDate>Wed, 01 Dec 2004 13:56:42 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=529402</link>
        <description><![CDATA[noldor: да, точно<br>
<br>
исправил recv на ф-цию след вида<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">long readn(SOCKET skt, char* buffer, long length)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;long cnt, rc;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cnt = length;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(cnt &#62; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;rc = recv(skt, buffer, cnt, 0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(rc &#60; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return -1; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(rc == 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return length - cnt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;buffer += rc;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cnt -= rc;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return length;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>noldor</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=529221</guid>
        <pubDate>Wed, 01 Dec 2004 10:49:52 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=529221</link>
        <description><![CDATA[UncleBob: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Guest, 1.12.04, 11:57, 529060</span><div class='quote '>if( recv(skt, (char*)&amp;size, sizeof(long), 0) &lt;=0)</div></div><br>
Здесь бага, т.к. совсем необязательно ты примешь 4 байта.<br>
<br>
И потом, для чистоты эксперимента TRACE необходимо вынести за цикл.]]></description>
        <author>UncleBob</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=529060</guid>
        <pubDate>Wed, 01 Dec 2004 08:57:42 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=529060</link>
        <description><![CDATA[Guest: лаги....<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">bool InitClient()</div><div class="code_line">{</div><div class="code_line">///////////////////////////////// WSAStartup ///////////////////////////////////////////</div><div class="code_line">&nbsp;&nbsp; &nbsp;WORD wVersionRequested;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSADATA wsaData;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int err;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wVersionRequested = MAKEWORD( 2, 2 );</div><div class="code_line">&nbsp;&nbsp; &nbsp;err = WSAStartup( wVersionRequested, &amp;wsaData );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ( err != 0 ) </div><div class="code_line">&nbsp;&nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;child-&#62;AddToErrorLog(&quot;could not find a usable WinSock DLL&quot;); &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Confirm that the WinSock DLL supports 2.2</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 ) </div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;child-&#62;AddToErrorLog(&quot;could not find a usable WinSock DLL&quot;); &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;WSACleanup(); &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return false; </div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">/////////////////////////////////// connect to server ////////////////////////////////////////// &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct sockaddr_in peer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SOCKET skt=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int res;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;memset(&amp;peer, 0, sizeof(peer));</div><div class="code_line">&nbsp;&nbsp; &nbsp;peer.sin_family = AF_INET; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;peer.sin_port = htons(4000);</div><div class="code_line">&nbsp;&nbsp; &nbsp;peer.sin_addr.s_addr = inet_addr(m_ActiveServer_ip); &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( (skt = socket(AF_INET, SOCK_STREAM, 0)) &#60; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;child-&#62;ShowErrorMessage(WSAGetLastError());</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;TRACE(&quot;\nconnecting to server. port=4000 ip=%s\n&quot;, m_ActiveServer_ip); &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( (res = connect(skt, (struct sockaddr*)&amp;peer, sizeof(peer)) ) != 0 )</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;child-&#62;ShowErrorMessage(WSAGetLastError());</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;closesocket(skt); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">///////////////////////////// get server connection //////////////////////////////////</div><div class="code_line">&nbsp;&nbsp; &nbsp;SOCKET listen_skt, read_skt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct sockaddr_in local;</div><div class="code_line">&nbsp;&nbsp; &nbsp;local.sin_family = PF_INET; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;local.sin_port = htons(4001);</div><div class="code_line">&nbsp;&nbsp; &nbsp;local.sin_addr.s_addr = 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// create socket</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( (listen_skt = socket( PF_INET, SOCK_STREAM, 0) ) &#60; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;child-&#62;ShowErrorMessage(WSAGetLastError());</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// bind address and port to listening socket</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( (res = bind(listen_skt, (struct sockaddr*)&amp;local, sizeof(local)) ) &#60; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;child-&#62;ShowErrorMessage(WSAGetLastError());</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// mark socket as listening</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( (res = listen(listen_skt, 5)) != 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;child-&#62;ShowErrorMessage(WSAGetLastError());</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( (read_skt = accept(listen_skt, NULL, NULL)) &#60; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;child-&#62;ShowErrorMessage(WSAGetLastError());</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_sendsocket = skt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_readsocket = read_skt;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;AfxBeginThread(SendFunc, NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp;AfxBeginThread(GetFunc, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return true;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">//bool InitServer() - аналогично InitClient()</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">UINT SendFunc(LPVOID pParam)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int skt = m_sendsocket;</div><div class="code_line">&nbsp;&nbsp; &nbsp;long counter=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;long size = 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;tag_message1 message;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for(long i=0; i&#60;50000; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;message.param[i] = &#39;W&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;message.param[i] = &#39;{text}&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(1)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;size = sizeof(tag_message1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// send size</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if( send(skt, (char*)&amp;size, sizeof(long), 0) &#60; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DWORD s = WSAGetLastError();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;char* p = reinterpret_cast&#60;char*&#62;(&amp;message); &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// send structure</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if( send(skt, p, size, 0) &#60; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DWORD s = WSAGetLastError();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">UINT GetFunc(LPVOID pParam)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int skt = m_readsocket;</div><div class="code_line">&nbsp;&nbsp; &nbsp;long counter=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;long ret;</div><div class="code_line">&nbsp;&nbsp; &nbsp;long size = 0; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;tag_message1 message;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for(long i=0; i&#60;50000; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;message.param[i] = &#39;W&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;message.param[i] = &#39;{text}&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(1)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// get parameter length</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;size = sizeof(tag_message1);//strlen(message.param); &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if( recv(skt, (char*)&amp;size, sizeof(long), 0) &#60;=0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DWORD s = WSAGetLastError();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;char* buff = new char [size]; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//tag_message1 pmsg = new tag_message1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;long nBytes = recv( skt, buff, size, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;tag_message1 *pmsg = reinterpret_cast&#60;tag_message1*&#62;(buff);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;TRACE(&quot;\ngot\t%d&quot;, counter++);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;delete [] buff; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Guest</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=529005</guid>
        <pubDate>Wed, 01 Dec 2004 08:25:07 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=529005</link>
        <description><![CDATA[Guest: =)<br>спасибо, попробую вариант с помощью WSASocket <br><br>проверил использование 2 сокетов:<br>клиент соединяется с сервером - 1-й сокет (для отправки сообщений)<br>принимает соединение от сервера - 2-й сокет (для приема сообщений)<br><br>создаются 2 потока:<br>один передает данные по первому сокету<br>второй принимает данные по второму сокету<br><br>передаю сообщения 60000 байт<br>при этом за минуту приходит 9300 сообщений (150 в сек)<br><br>уже лучше, но все равно мало, если прибавить к этому постановку сообщения в очередь и удаление из очереди после отправки]]></description>
        <author>Guest</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528691</guid>
        <pubDate>Tue, 30 Nov 2004 18:45:16 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528691</link>
        <description><![CDATA[Oleg2004: Для увеличения скорости передачи/приема надо пользоваться асинхронными функциями с перекрытием операций в/в<br>
Сокет открывается тоже в асинхронном режиме:<br>
Модель с перекрытием (ее также называют моделью совмещенных операций) – Overlapped I/O. Эта разновидность обмена реализуется только на сокетах, которые при формировании были объявлены для исполнения на них совмещенных операций c помощью функции WSASocket():<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">SOCKET WSASocket(</div><div class="code_line">&nbsp;&nbsp; &nbsp;int af, </div><div class="code_line">&nbsp;&nbsp; &nbsp;int type, </div><div class="code_line">&nbsp;&nbsp; &nbsp;int protocol,</div><div class="code_line">&nbsp;&nbsp; &nbsp;LPWSAPROTOCOL_INFO lpProtocolInfo,</div><div class="code_line">&nbsp;&nbsp; &nbsp;GROUP g,</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwFlags);</div></ol></div></div></div></div><br>
Три первых параметра полностью соответствуют функции открытия сокета в стиле Беркли. Четвертым параметром является указатель на структуру WSAPROTOCOL_INFO. Если lpProtocolInfo равен NULL, тогда решение, какой сервис-провайдер будет избран, решает ws2_32.dll на основании параметров af, type и protocol. Если поле протокола равно 0, то выбирается тот провайдер, у которого эта характеристика прописана в его информационной структуре. <br>
Если указатель lpProtocolInfo ссылается на конкретную запись провайдера, а первые три параметра сокетной функции записаны в виде предопределенной константы FROM_PROTOCOL_INFO (&quot;брать из информации о протоколе&quot;), тогда сокет создается в соответствии с характеристиками провайдера. Пятый параметр относится к &quot;группам сокетов&quot;, и хотя и определен в спецификации WinSock 2.0, практически еще в Windows не реализован.<br>
Последний параметр – это необязательный флаг, который может быть установлен при вызове. В настоящее время лишь один флаг играет большую роль – и этим флагом как раз является флаг WSA_FLAG_OVERLAPPED. <br>
Модель I/O с перекрытием является самой производительной из всех до сих пор рассмотренных моделей. Она впервые появилась в спецификации WinSock 1.1, но была вначале реализована лишь на Windows NT.<br>
Суть этой модели в том, что она  позволяет приложению выдать &quot;одновременно&quot; несколько асинхронных запросов на исполнение операций ввода/вывода, используя специальную структуру данных с перекрытием. Затем, по прошествию некоторого времени, приложение может проверить, выполнены ли его запросы и обработать результаты завершившихся операций. В настоящее время эта модель доступна на всех современных версиях Windows, за исключением Windows CE.]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528391</guid>
        <pubDate>Tue, 30 Nov 2004 13:56:05 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528391</link>
        <description><![CDATA[Duke Nuken: Я бы тут делал на на отправляющей стороне по 100 (или больше) потоков в каждый <br>из которых бы передавал строку для отправки. То есть поток конектиться,<br>отправляет и убиваеться.<br><br>На серваке сделал бы прием accept в цикле и при каждем конекте передавал бы в новый <br>поток этот указатель на новый сокет, поток с него получает инфу и убиваеться.<br><br>Изврат конешно, ну а что тут еще можно придумать?]]></description>
        <author>Duke Nuken</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528125</guid>
        <pubDate>Tue, 30 Nov 2004 10:52:52 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528125</link>
        <description><![CDATA[UncleBob: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Guest, 30.11.04, 11:45, 527953</span><div class='quote '>использую АПИ функции сокетов </div></div><br>
Нарисуй код отправляющего / принимающего потока]]></description>
        <author>UncleBob</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528049</guid>
        <pubDate>Tue, 30 Nov 2004 09:56:23 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528049</link>
        <description><![CDATA[masta: Сдаётся мне, человек что-то типа &quot;ping of death&quot; пишет.<br>Помнится, Win98 валилась, если её пинговали из-под линукса нефрагментированным пакетом в 64К (или что-то в этом роде, я в этом не очень хорошо разбираюсь)]]></description>
        <author>masta</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528023</guid>
        <pubDate>Tue, 30 Nov 2004 09:28:27 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528023</link>
        <description><![CDATA[PIL: ;) а еще разные там заголовки пакетов посчитать... так вобще пыль остаеться ;)]]></description>
        <author>PIL</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528021</guid>
        <pubDate>Tue, 30 Nov 2004 09:26:19 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=528021</link>
        <description><![CDATA[VictN: Максимальный размер кадра 1500 байт<br>При отправке кадра драйвер сетевой карты переходит на прием, где проверяет, если сеть свободна, то пытается отправить новый кадр<br>Вот. В сумме загруженнность сети считается максимальным когда 80% от скорости сети.<br>Соответственно возрастает задержка при отправе кадра, в ожидании паузы.<br>Соотвественно сколько работает компьютеров в сети, как сильно интенсивно нагружена, то можно приблизительно посчитать, что максимальная  скорость в сети для одного компа будет около 80% от скорости сети / количество компов в сети. Учитывая служебные пакеты, дополнительные обертки для данных, пока они доберутся до физического уровня скорость еще снижается.]]></description>
        <author>VictN</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=527995</guid>
        <pubDate>Tue, 30 Nov 2004 09:08:36 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=527995</link>
        <description><![CDATA[IEZ: <strong class='tag-b'>Guest</strong>, И увеличивая скорость сети советую ставить свитч, а не хаб.<br>
Головняка меньше в настройке и в плане работы, претензий не было.<br>
Один раз хаб пришлось душным летом остужать вентилятором, что бв сеть не висла.<br>
 :D <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="2004-11-30T09:11:02+00:00">30.11.04, 09:11</time></span></span><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>может ли помочь, если для отправки и приема сокеты будут разные</div></div><br>
В трубу с пропускной способностью 100 ведер в секунду, не прогнать 1000 ведер в секунду. :D]]></description>
        <author>IEZ</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=527993</guid>
        <pubDate>Tue, 30 Nov 2004 09:07:38 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=527993</link>
        <description><![CDATA[Guest: =((<br>да, это я погорячился, конечно, 400 сообщений/сек было при очень небольшом размере <br><br>для сообщений 60000 байт: с помощью recv, send посылка их туда-сюда дает низкий результат, за минуту около 5200 сообщений, что составляет 85-90 в секунду.<br><br>при этом использую один и тот же сокет.<br>может ли помочь, если для отправки и приема сокеты будут разные?]]></description>
        <author>Guest</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=527964</guid>
        <pubDate>Tue, 30 Nov 2004 08:53:41 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=527964</link>
        <description><![CDATA[VictN: а теперь посчитаем... <br>60000 байт * 400 сообщений в секунду, что равно 24 000 000 байт в секунду<br>умножаем на 8 бит в байте получаем 192 000 000 бит в секунду.<br>Что для 100 мегабитки в полнодуплексном режиме это предел<br>и большего ты можешь добиться только увеличением скорости сети<br> :D]]></description>
        <author>VictN</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=527953</guid>
        <pubDate>Tue, 30 Nov 2004 08:45:59 +0000</pubDate>
        <title>быстрая передача данных через сокеты</title>
        <link>https://forum.sources.ru/index.php?showtopic=74367&amp;view=findpost&amp;p=527953</link>
        <description><![CDATA[Guest: кто нибудь знает способ передавать порядка тысячи сообщений в секунду?<br><br>сообщения размером 60000 байт <br>1-й поток принимает сообщения, ставит в очередь(очередь в оперативке)<br>2-й поток из очереди отправляет сообщения<br><br>на приеме-отправке сообщений смог добиться 400 сообщений/сек. <br>Надо больше&#33;&#33;&#33;&#33;&#33;<br><br>использую АПИ функции сокетов]]></description>
        <author>Guest</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	