Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QUdpSocket - баг с pendingDatagramSize() ?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
Алексей1153
Qt 5.9.2
QUdpSocket

наткнулся на странное поведение класса:

s->hasPendingDatagrams() возвращает true, ок, иду вызывать s->pendingDatagramSize() - а функция поначалу действительно возвращает размеры пакетов, но в какой-то момент начинает возвращать -1

это при том, что hasPendingDatagrams() ==true, bytesAvailable()>0 :blink:

в такой ситуации, однако, возвращается ошибка UnknownSocketError, причём очистить ошибку можно только попыткой чтения датаграммы длиной 0 байтов

s->readDatagram(ba, 0);


---------------------

перешёл к использованию hasPendingDatagrams()+bytesAvailable() (а pendingDatagramSize не смотрю вообще),
поскольку readDatagram читает одну датаграмму, даже если указать больше её длины при чтении

но при этом иногда таки проскакивает bytesAvailable()==1. при этом датаграмма теряется при попытке чтения, насколько я понимаю. Ошибка возвращается такая:
QAbstractSocket::ConnectionRefusedError / "Connection reset by peer"
---------------------

кто знает, как баг с pendingDatagramSize победить ?
Алексей1153
Цитата(Алексей1153 @ 17.1.2019, 10:43) *
перешёл к использованию hasPendingDatagrams()+bytesAvailable() (а pendingDatagramSize не смотрю вообще),
поскольку readDatagram читает одну датаграмму, даже если указать больше её длины при чтении


данный костыль работает нормально, пакеты не теряются. Другого решения не нашёл пока что
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.