<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: send и select</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9086.html</link>
    <description>Не могу никак разобраться.&lt;br&gt;Использую неблокирующие сокеты и select.&lt;br&gt;Программа принимает соединения, читает и пишет в клиентские сокеты, все работает.&lt;br&gt;Но всплыла проблема:&lt;br&gt;если попробовать отослать относительно большой объем данных (150 кб),&lt;br&gt;то отсылается примерно 33864 байт, а далее шлется маленькими кусочками&lt;br&gt;байт по 100 с интервалом по несколько секунд.&lt;br&gt;С чем может быть связано такое поведение?&lt;br&gt;&lt;br&gt;На всякий случай:&lt;br&gt;вот синтаксис select:&lt;br&gt;&lt;br&gt;select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,&lt;br&gt;         struct timeval *timeout);&lt;br&gt;&lt;br&gt;по событию на readfds для клиентского сокета я читаю данные, все нормально.&lt;br&gt;по событию на writefds для клиентского сокета я ничего не делаю.&lt;br&gt;Просто в произвольном месте программы вызываю send(sclient, buffer, 150*1024, 0).&lt;br&gt;Это правильно?&lt;br&gt;&lt;br&gt;</description>

<item>
    <title>send и select (drone)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9086.html#23</link>
    <pubDate>Sat, 09 Apr 2011 09:04:07 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Я подохревал подвох, поэтому написал в своем первом сообщении: &lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; по событию на writefds для клиентского сокета я ничего не делаю.&lt;br&gt;&amp;gt; В вашем исходном посте смутило, да и сейчас смущает это: &lt;br&gt;&amp;gt;&amp;gt;то отсылается примерно 33864 байт, а далее шлется маленькими кусочками &lt;br&gt;&amp;gt;&amp;gt;байт по 100 с интервалом по несколько секунд.&lt;br&gt;&amp;gt; Совершенно не понятно откуда берутся кусочки по 100 байт если send() на &lt;br&gt;&amp;gt; клиента все-таки один. Если вы с этим разобрались может расскажите?&lt;br&gt;&lt;br&gt;Там от клиента приходили сообщения с таким интервалом видимо.&lt;br&gt;Тоже асинхронно, и сервер на них лтвечал, поэтому я предположил, что это те данные досылаются.&lt;br&gt;Факт прихода этих данных я наблюдал на клиентской машине.&lt;br&gt;Так как данных много, я о конца передачи не дожидался.&lt;br&gt;Весь прием замораживался на клиенте, потому что передача осуществляется &lt;br&gt;посредством некого протокола. Когда большие данные начали передаваться, первым пошел заголовок с CRC и общим размером пакета.&lt;br&gt;В итоге часть паета пришла, далее стало дополняться данными от маленьких запо</description>
</item>

<item>
    <title>send и select (guest)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9086.html#22</link>
    <pubDate>Sat, 09 Apr 2011 04:38:12 GMT</pubDate>
    <description>&amp;gt; Я подохревал подвох, поэтому написал в своем первом сообщении: &lt;br&gt;&amp;gt;&amp;gt;&amp;gt; по событию на writefds для клиентского сокета я ничего не делаю.&lt;br&gt;&lt;br&gt;В вашем исходном посте смутило, да и сейчас смущает это:&lt;br&gt;&amp;gt;то отсылается примерно 33864 байт, а далее шлется маленькими кусочками&lt;br&gt;&amp;gt;байт по 100 с интервалом по несколько секунд.&lt;br&gt;&lt;br&gt;Совершенно не понятно откуда берутся кусочки по 100 байт если send() на клиента все-таки один. Если вы с этим разобрались может расскажите?&lt;br&gt;</description>
</item>

<item>
    <title>send и select (drone)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9086.html#21</link>
    <pubDate>Sat, 09 Apr 2011 01:11:19 GMT</pubDate>
    <description>Всем спасибо за ответы, я разобрался.&lt;br&gt;Проблема была в не правильном понимании работы неблокирующих сокетов.&lt;br&gt;Я думал, что вызвав send, _все_ данные положатся во внутренний буфер и сами зашлются, а занчение, которое возвращает send - это количество данных, отправленное на данный момент.&lt;br&gt;Для меня было новостью, что после этого оно ничего слать никуда не будет. А хвост моего буфера останется не отосланным.&lt;br&gt;Я подохревал подвох, поэтому написал в своем первом сообщении:&lt;br&gt;&amp;gt;&amp;gt; по событию на writefds для клиентского сокета я ничего не делаю.&lt;br&gt;&lt;br&gt;Теперь я понимаю, что в этом месте нужно досылать не отосланные данные.&lt;br&gt;Видимо криво излагаю свои мысли, раз такая дискуссия разрослась.&lt;br&gt;Посыпаю свою голову пеплом и еще раз всем спасибо =)&lt;br&gt;</description>
</item>

<item>
    <title>send и select (drone)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9086.html#20</link>
    <pubDate>Sat, 09 Apr 2011 00:20:04 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt; ответ.&lt;br&gt;&amp;gt;&amp;gt; Ничего там не жрется.&lt;br&gt;&amp;gt;&amp;gt; То что оно не может отослать 150 кб за раз это я &lt;br&gt;&amp;gt;&amp;gt; тоже понимаю, админю и прогаю почти 10 лет. Вопрос не в &lt;br&gt;&amp;gt;&amp;gt; том, почему частями, а в том, откуда взялись эти дикие задержки.&lt;br&gt;&amp;gt; Ответ был, повторю: следующий вызов send() происходит через случайное время, а именно &lt;br&gt;&amp;gt; либо по готовности одного из дескрипторов к чтению либо по истечению &lt;br&gt;&amp;gt; таймаута select() &lt;br&gt;&amp;gt; Или вы все-таки не понимаете, что ваш send(sclient, buffer, 150*1024, 0) всегда &lt;br&gt;&amp;gt; возвращает &amp;lt;= размера SO_SNDBUF?&lt;br&gt;&lt;br&gt;---------------------&lt;br&gt;</description>
</item>

<item>
    <title>send и select (drone)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9086.html#19</link>
    <pubDate>Sat, 09 Apr 2011 00:14:00 GMT</pubDate>
    <description>-------------&lt;br&gt;</description>
</item>

<item>
    <title>send и select (guest)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9086.html#18</link>
    <pubDate>Fri, 08 Apr 2011 06:23:11 GMT</pubDate>
    <description>&amp;gt; Да господи! Читайте первый пост. Процитирую: &lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Просто в произвольном месте программы вызываю send(sclient, buffer, 150*1024, 0).&lt;br&gt;&lt;br&gt;Да не нервничайте вы так.&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; Обычно это после того, как пришли данные на сокет и обработались. Шлется &lt;br&gt;&amp;gt; ответ.&lt;br&gt;&amp;gt; Ничего там не жрется.&lt;br&gt;&amp;gt; То что оно не может отослать 150 кб за раз это я &lt;br&gt;&amp;gt; тоже понимаю, админю и прогаю почти 10 лет. Вопрос не в &lt;br&gt;&amp;gt; том, почему частями, а в том, откуда взялись эти дикие задержки. &lt;br&gt;&lt;br&gt;Ответ был, повторю: следующий вызов send() происходит через случайное время, а именно либо по готовности одного из дескрипторов к чтению либо по истечению таймаута select()&lt;br&gt;Или вы все-таки не понимаете, что ваш send(sclient, buffer, 150*1024, 0) всегда возвращает &amp;lt;= размера SO_SNDBUF?&lt;br&gt;</description>
</item>

<item>
    <title>send и select (guest)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9086.html#17</link>
    <pubDate>Fri, 08 Apr 2011 06:00:33 GMT</pubDate>
    <description>&amp;gt; вы сможете набросать код на несколько строк &lt;br&gt;&amp;gt; клиент-сервера &lt;br&gt;&amp;gt; который демонстрируют такую особенность?&lt;br&gt;&lt;br&gt;человек напрочь не понимает, что на не блокируемом сокете с дефолтными буферами его&lt;br&gt;send(,,150*1024,) никогда не вернет 150*1024 т.к. за 10лет не дочитал man send&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>send и select (drone)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9086.html#16</link>
    <pubDate>Thu, 07 Apr 2011 20:05:09 GMT</pubDate>
    <description>&amp;gt;&amp;gt; тоже понимаю, админю и прогаю почти 10 лет. Вопрос не в &lt;br&gt;&amp;gt; тоесть если у вас такой большой опыт &lt;br&gt;&amp;gt; вы сможете набросать код на несколько строк &lt;br&gt;&amp;gt; клиент-сервера &lt;br&gt;&amp;gt; который демонстрируют такую особенность?&lt;br&gt;&amp;gt; скомпилять и запустить каждый у себя локально сможет! ) &lt;br&gt;&lt;br&gt;Надеялся обойтись без этого, работы много.&lt;br&gt;Думал, может кто сталкивался.&lt;br&gt;Освобожусь, напишу обязательно.&lt;br&gt;</description>
</item>

<item>
    <title>send и select (C)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9086.html#15</link>
    <pubDate>Thu, 07 Apr 2011 19:46:02 GMT</pubDate>
    <description>&amp;gt; тоже понимаю, админю и прогаю почти 10 лет. Вопрос не в &lt;br&gt;&lt;br&gt;тоесть если у вас такой большой опыт&lt;br&gt;вы сможете набросать код на несколько строк&lt;br&gt;клиент-сервера&lt;br&gt;который демонстрируют такую особенность?&lt;br&gt;&lt;br&gt;скомпилять и запустить каждый у себя локально сможет! ) &lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
