Я использую QUdpSocket в Windows XP для отправки некоторых данных. Каждые 10 секунд я посылаю от 100 до 500 пакетов, каждый примерно по 50 байтов. У меня нет проблем с хостом, отправляющим небольшое количество пакетов каждый раз. Проблемы возникают на хосте, отправляющем 500 пакетов и более каждые 10 секунд.
При использовании writeDatagram (…) я получил сообщение об ошибке «Невозможно отправить данные». Большинство из 500 пакетов отправлено (проверено с помощью wireshark), но некоторые не отправляются вообще (последние).
Я думаю, что проблема возникает, когда буфер записи сокета заполнен. Но я понятия не имею, как проверить это с помощью Qt, чтобы просто подождать, пока буфер не будет готов к записи большего количества данных.
Без Qt я мог бы использовать метод select (…), чтобы проверить, готов ли сокет, и посылать по 1 байту за раз. Но как я могу проверить это с помощью QUdpSocket. Там нет такого метода. Кроме того, bytesToWrite (), кажется, всегда возвращает ноль.
Я знаю, что могу просто поспать и повторить попытку, но я не думаю, что этот метод надежен. Метод может не удаться по другой причине. В ОС есть хороший метод для этого, он называется select ().
Спасибо за помощь.
Задача ещё не решена.
Других решений пока нет …