Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ QUdpSocket - баг с pendingDatagramSize() ?

Автор: Алексей1153 17.1.2019, 8:43

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 25.1.2019, 10:57

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


данный костыль работает нормально, пакеты не теряются. Другого решения не нашёл пока что

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)