Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dima Tесли селект вернул "можно читать" происходит чтение. Ты всерьёз считаешь, что "sendto" это чтение? У тебя в select третий параметр NULL - ты не проверяешь можно ли писать в сокет, но пишешь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 18:54 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov А ещё лучше - не выпендриваться с неблокирующими сокетами вообще. А все таки, что вы имели ввиду под "неблокирующими сокетами"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 18:58 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDima Tесли селект вернул "можно читать" происходит чтение. Ты всерьёз считаешь, что "sendto" это чтение? Промолчу Dimitry Sibiryakov У тебя в select третий параметр NULL - ты не проверяешь можно ли писать в сокет, но пишешь. Можно чуть подробнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 19:30 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Топик напоминает художника, рисующего слона наощупь в темной комнате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 19:33 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинА все таки, что вы имели ввиду под "неблокирующими сокетами"? Сокеты, к которым применено ioctlsocket(FIONBIO). Они в сочетании с отсутствием проверки на возможность записи в select() и кода возврата sendto (то есть именно так как писал афтор в этом топике) приводят как раз к эффекту "пропадания пакетов". В другом топике у автора есть проверка кода возврата, и нет вызова ioctl, так что можно сделать вывод, что хотя сокеты у него и блокирующие, винда нагло выкидывает UDP данные если под них нет свободного буфера. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 19:49 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivТопик напоминает художника, рисующего слона наощупь в темной комнате. Если ты про меня, то вместо сарказма подскажи что почитать, если считаешь что отвечать долго. 10 лет осваивал фокс, столько же умничаю на фоксовом форуме, параллельно кое-что на си писал, только чтобы от winapi получить то что фокс не может, но не могу себе позволить 10 лет потратить на заработку звания гуры в низкоуровневом программировании, не надо оно мне, да и жить вечно не планирую. Поднял вопрос не чтобы чем-то похвастаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 20:14 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dima TМожно чуть подробнее. Dima Tвместо сарказма подскажи что почитать Описание select() разве не самоочевидное чтиво?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 20:23 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDima TМожно чуть подробнее. Dima Tвместо сарказма подскажи что почитать Описание select() разве не самоочевидное чтиво?.. Намеки выше понял, читаю... проще надо быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 20:27 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dima T, У тебя идеологические проблемы на мой взгляд. UDP про жизни теряет. А ты хочешь не терять. Надо учиться просто "жить" даже при условии силу тебя что-то теряется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 11:49 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivDima T, У тебя идеологические проблемы на мой взгляд. UDP про жизни теряет. А ты хочешь не терять. Надо учиться просто "жить" даже при условии силу тебя что-то теряется. Пока у меня проблемы "чайника", я уперся в то что пакет теряется на отправителе, sendto() срабатывает без ошибок, а виндовс молча убивает. Надо просто разобраться как быть уверенным что действительно пакет ушел. В идеале чтобы sendto() дождался отправки прежде чем что-то вернет (я считал что оно так и происходит). Думаю это идеологию не нарушает. Порешал пока добавив таймаут в select(), сам понимаю что коряво. Пока времени нет, попозже буду изучать select(), ioctlsocket(). Мне бы какую-нибудь статью нормальную чтоб там все сразу вместе было собрано про работу с сокетами. Чтобы тонкости и ньюансы понять. Желательно на русском. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 12:54 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Пока у меня проблемы "чайника", я уперся в то что пакет теряется на отправителе, sendto() срабатывает без ошибок, а виндовс молча убивает. Так в UDP они по жизни теряются. что тут разбираться ? Надо просто разобраться как быть уверенным что действительно пакет ушел. Никак. Ты можешь только слать квитки с другой стороны сети. В идеале чтобы sendto() дождался отправки прежде чем что-то вернет (я считал что оно так и происходит). Так делай синхронный сокет. Правда, он тебе не даст гарантию, что он отправил, даст толко что он попытался отправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 13:00 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dima TМне бы какую-нибудь статью нормальную чтоб там все сразу вместе было собрано про работу с сокетами. Чтобы тонкости и ньюансы понять. Желательно на русском.Я тебе уже давал ссылку на целый учебник. Там ВСЕ расписано. И как сокеты работают, и как p2p делать и несколько алгоритмов сетей разобрано. Берешь и читаешь. И на русском - тоже есть учебники. Не уверен что тот который я показал переводили, но и других хватает. Идешь в свой любимый магазин и ищешь там все что имеет в названии "TCP/IP". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 17:51 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Вот исходник, если кто глянуть захочет, красным выделены добавленные проверки Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. Пробовал по отдельности и вместе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Не помогло ничего. При этом ни один if() не сработал. Ни одного printf() об ошибке не вывел. Виндовс тупо сообщает что все отлично, но получатель стабильно получает 1-3 пакетов из 100 отправленных непрерывным потоком. Может что-то накосячил в коде проверок, делал по примерам MSDN. Меняем таймаут select() с 0 на 1 мксек. и все отлично, 100 из 100 доставлено (на 127.0.0.1 и в локалке). Похоже это единственный вариант протолкнуть пакеты наружу. Оставляю этот костыль. MasterZivТак в UDP они по жизни теряются. что тут разбираться ? Похоже ты прав. Пусть теряются и не надо ломать голову где. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 17:56 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
White OwlЯ тебе уже давал ссылку на целый учебник. Там ВСЕ расписано. И как сокеты работают, и как p2p делать и несколько алгоритмов сетей разобрано. Я его даже скачал, только там 700 страниц, в любом случае почитаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 17:59 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Все что выше написано - это мой бред и домыслы. Сообщения доходят и рубятся получателем . Виндовс отправителя все честно отправил без пауз в 1 мкс. Определил так: поставил на получателя wipfw и настроил запись в лог UDP. Вижу в логе 100 входящих пакетов. Получатель видит 1-2. Вывод: мой получатель с буферизацией чтения бесполезен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 19:21 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dima TВсе что выше написано - это мой бред и домыслы. Сообщения доходят и рубятся получателем . Виндовс отправителя все честно отправил без пауз в 1 мкс. Ну, помнишь, что я говорил про слона ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 20:56 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Дубль 2. Dima TВсе что выше написано - это мой бред и домыслы. Сообщения доходят и рубятся получателем . Виндовс отправителя все честно отправил без пауз в 1 мкс. Определил так: поставил на получателя wipfw и настроил запись в лог UDP. Вижу в логе 100 входящих пакетов. Получатель видит 1-2. Вывод: мой получатель с буферизацией чтения бесполезен. Вася УткинDima Tпропущено... setsockopt(SO_RCVBUF) оно? Пробовали делать на принимающей стороне ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Проблему решило? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 04:08 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинSO_RCVBUF Проблему решило? Не совсем. Эффекта никакого не дало в том виде как у меня написан прием. Делал так (на 200 пакетов) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Замена цикла приема на такой дает прием всех 100. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. это при условии быстрой отработки parse_udp_message(). В данном случае у меня там только проверка номера пакета. Отправка происходит только после приема 100-го пакета. Но стоит добавить printf() (закомментирован который) - начинает теряться половина пакетов. Но если добавить установку SO_RCVBUF то начинает принимать все 100. Т.е. установка SO_RCVBUF что-то дает, но по какому-то хитрому алгоритму. Скорее всего никакой хитрости нет, а есть изначальная заточка под прием потокового медиа трафика. MasterZivНу, помнишь, что я говорил про слона Да уж, слон не удался. Буду нового рисовать :) Попробую взять за основу этот цикл приема, писать в нем свои буфера, а обработку и отправку вынести во второй поток. Странно что select() в исходном варианте дал такой нездоровый эффект. Я ему даже таймаут повышал, чтобы только select() и recvfrom() работали пока поток идет. Надо еще поизучать что там реально происходит. ХЗ только как тестить если printf() все меняет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 09:22 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dima TНо стоит добавить printf() (закомментирован который) - начинает теряться половина пакетов. Но если добавить установку SO_RCVBUF то начинает принимать все 100. Т.е. установка SO_RCVBUF что-то дает, но по какому-то хитрому алгоритму. Скорее всего никакой хитрости нет, а есть изначальная заточка под прием потокового медиа трафика. Какая ещё хитрость? Просто увеличил размер внутреннего кольцевого буфера UDP и теперь туда влезают все 100 пакетов, даже если ты не успел ни один из них вычитать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 12:18 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинКакая ещё хитрость? Просто увеличил размер внутреннего кольцевого буфера UDP и теперь туда влезают все 100 пакетов, даже если ты не успел ни один из них вычитать. Все верно. Опять я фантазирую. Нашел косяк, потери были уже в моем самодельном кэше. Попробую вообще от него избавиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 14:00 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dima TВася УткинКакая ещё хитрость? Просто увеличил размер внутреннего кольцевого буфера UDP и теперь туда влезают все 100 пакетов, даже если ты не успел ни один из них вычитать. Все верно. Опять я фантазирую. Нашел косяк, потери были уже в моем самодельном кэше. Попробую вообще от него избавиться. А вам не критично если все таки иногда 1-2 или 10-20 пакетов будут теряться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 14:14 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинDima Tпропущено... Все верно. Опять я фантазирую. Нашел косяк, потери были уже в моем самодельном кэше. Попробую вообще от него избавиться. А вам не критично если все таки иногда 1-2 или 10-20 пакетов будут теряться? Не критично до 5% от общего количества. Мой кэш может как-то помочь потери уменьшить? Мне 1 Мб буфера ОС с запасом хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 14:56 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Dima TВася Уткинпропущено... А вам не критично если все таки иногда 1-2 или 10-20 пакетов будут теряться? Не критично до 5% от общего количества. Мой кэш может как-то помочь потери уменьшить? Мне 1 Мб буфера ОС с запасом хватит. Нет, не поможет. Ставьте 1-4МБ буфер UDP и убирайте свой кэш. Собственно всё :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 15:05 |
|
||
|
Чтение и запись в UDP сокет большой очереди пакетов. Как оптимизировать?
|
|||
|---|---|---|---|
|
#18+
Вася УткинНет, не поможет. Ставьте 1-4МБ буфер UDP и убирайте свой кэш. Собственно всё :) Убрал свой, поставил 2 Мб. Все работает. Потестил через инет: 90-100 доходит при отправке потоком. Всем спасибо за участие. Сделаю паузу, займусь чтением умной книжки по сетям. Чтобы мелкие косяки вперемешку с недопонимаем не приводили к рисованию слонов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 15:53 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2019608]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
8ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 281ms |
| total: | 461ms |

| 0 / 0 |
