<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: как принять все данные из udp сокета</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7406.html</link>
    <description>Всем привет.&lt;br&gt;Пытаюсь разобраться с сокетами. Не пойму, что происходит с данными, которые при считывании из сокета не влезли в буффер. Они просто отбрасываются? Можно ли прочитать содержимое сокета за несколько заходов? Если нет, каким выставлять размер буффера, чтоб уж наверняка влезло все за одно считывание.&lt;br&gt;&lt;br&gt;Вот собственно код:&lt;br&gt;while(1) &#123;&lt;br&gt;    memset(msg,0x0,MAX_MSG);&lt;br&gt;    cliLen = sizeof(cliAddr);&lt;br&gt;    n = recvfrom(sd,msg,MAX_MSG,0,(struct sockaddr *) &amp;cliAddr,&amp;cliLen);&lt;br&gt;    if(n&amp;lt;0) &#123;&lt;br&gt;      printf(&quot;&#037;s: cannot receive data &#092;n&quot;,argv&#091;0&#093;); continue;&lt;br&gt;    &#125;&lt;br&gt;    printf(&quot;&#037;s: from &#037;s:UDP&#037;u : &#037;s &#092;n&quot;, argv&#091;0&#093;,inet_ntoa(cliAddr.sin_addr), ntohs(cliAddr.sin_port),msg);&lt;br&gt;&#125;&lt;br&gt;Netcat-ом шлю этому серверу строку символов. Если она больше MAX_MSG, лишние данные просто отбрасываются.Можно ли их получить не увеличивая MAX_MSG&lt;br&gt;&lt;br&gt;Заранее спасибо&lt;br&gt;</description>

<item>
    <title>как принять все данные из udp сокета (gdb)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7406.html#3</link>
    <pubDate>Mon, 09 Jun 2008 21:50:31 GMT</pubDate>
    <description>&lt;br&gt;сделайте буффер 65536&lt;br&gt;и читайте весь 65536 размер&lt;br&gt;если данных будет меньше то вам это возратит recvfrom&lt;br&gt;больше никогда не будет&lt;br&gt;это размер UDP&lt;br&gt;</description>
</item>

<item>
    <title>как принять все данные из udp сокета (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7406.html#2</link>
    <pubDate>Sun, 08 Jun 2008 21:45:25 GMT</pubDate>
    <description>&amp;gt;Имхо, нет &lt;br&gt;&lt;br&gt;Хотя может и да. По крайней мере точно можно вызывать recv с MSG_PEEK и увеличивать буффер если сообщение не влезло, но с логикой работы datagram протокола это никак не стыкуется.&lt;br&gt;</description>
</item>

<item>
    <title>как принять все данные из udp сокета (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7406.html#1</link>
    <pubDate>Sun, 08 Jun 2008 19:34:11 GMT</pubDate>
    <description>&amp;gt;Пытаюсь разобраться с сокетами. Не пойму, что происходит с данными, которые при &lt;br&gt;&amp;gt;считывании из сокета не влезли в буффер. Они просто отбрасываются? &lt;br&gt;&lt;br&gt;Да&lt;br&gt;&lt;br&gt;&amp;gt;Можно ли прочитать содержимое сокета за несколько заходов? Если нет, каким выставлять &lt;br&gt;&lt;br&gt;Имхо, нет&lt;br&gt;&lt;br&gt;&amp;gt;размер буффера, чтоб уж наверняка влезло все за одно считывание. &lt;br&gt;&lt;br&gt;Таким, какой максимальный размер может быть отправлен передающей стороной.&lt;br&gt;Если размер неизвестен, логичнее использовать все-таки потоковый протокол.&lt;br&gt;Как полумера - взять максимальный размер пакета. У UDP поле длины 16битное, соответственно 64KB хватит всем (С).&lt;br&gt;</description>
</item>

</channel>
</rss>
