Windows XP で QUdpSocket を使用してデータを送信しています。10 秒ごとに、それぞれ約 50 バイトのパケットを約 100 から 500 送信しています。毎回少量のパケットを送信するホストに問題はありません。10 秒ごとに 500 パケット以上を送信するホストで問題が発生します。
writeDatagram(...) を使用すると、「データを送信できません」というエラー メッセージが表示されました。500 パケットの大部分は送信されますが (wireshark でチェック)、一部はまったく送信されません (最後のパケット)。
ソケットの書き込みバッファがいっぱいになったときに問題が発生すると思います。しかし、これをQtでチェックして、バッファがさらにデータを書き込む準備ができるのを待つ方法がわかりません。
Qt がなければ、select(...) メソッドを使用して、ソケットの準備ができているかどうかを確認し、一度に 1 バイトずつ送信できます。しかし、どうすればそれを QUdpSocket で確認できますか。そのような方法はありません。また、bytesToWrite() は常にゼロを返すようです。
スリープして再試行できることはわかっていますが、この方法は信頼できるとは思いません。メソッドは他の理由で失敗する可能性があります。OS にはこれに適した方法があり、select() と呼ばれます。
ご協力ありがとうございました。