![]() |
|
|
![]()
|
|
| gpepsi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
При интенсивном трафике происходит потеря UDP-пакетов
Возможно из-за переполнения буфера сокета. Но никак не могу найти как изменить размер буфера чтения... |
|||
|
||||
| kuzulis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
QUdpSocket не использует буферизацию.
Она у него всегда отключена. Может быть можно как-то нативным способом это сделать, типа:
http://onlamp.com/onlamp/2005/11/17/tcp_tuning.html А вообще, гугл в помощь. Хотя, отставить гугл! Есть этот метод но он в нутрях Qt, приватный: bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt, int v); Как его вытащить - хз. Это сообщение отредактировал(а) kuzulis - 7.12.2011, 17:59 |
|||
|
||||
| gpepsi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
kuzulis, ты меня огорчил.
Странно, что они не дали возможность настраивать сокеты.... |
|||
|
||||
| gpepsi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
||||
|
||||
| kuzulis |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
О каком нативном сокете речь и о каком буфере? Вот эта буферизация (буфер):
Относится к внутреннему буферу класса QUdpSocket и это не есть буфер драйвера. И его нельзя никак включить в QUdpSocket. Да и смысла в этом нет, т.к в UDP обмен данными идет датаграммами определенного размера. Как изменить буфер драйвера нативным способом - я тебе привел выше пример. Да, он костыльный, но иначе ИМХО никак. Можешь попробовать сделать свой класс аналогичный QUdpSocket и вытащить для него метод bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt, int v); но тебе придется тогда вытаскивать из сорцов Qt приватные заголовки и подключать приватные классы типа QAbstractSocketPrivate и т.п. Что тоже является костылем. Хотя, может в будущем релизе Qt5 оно будет по умолчанию - ХЗ. Но а в итоге: Если у тебя теряются датаграммы - значит ты что-то делаешь не так. Если используешь UDP - то необходимо реализовывать свой контроль целостности пакетов, например транзакции типа: посылка/подтверждение. Удачи! Это сообщение отредактировал(а) kuzulis - 11.12.2011, 13:18 |
||||
|
|||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |