QTCPSocket
TCPサーバー(Ubuntuで実行されている)に接続するために使用しています。サーバーは、少なくとも 40 ミリ秒ごとに 1 バイトのパケットを送信しています。私のアプリケーションはリアルタイムなので、余分なネットワーク トラフィックを犠牲にしてデータをできるだけ速く受信することが重要です。
Windows から TCP クライアントに接続すると、パケットの受信を開始します。ただし、readyRead()
からの信号はQTCPSocket
200 ミリ秒ごとに 1 回だけ送信されます (パケット内に 5 バイトあります)。Wireshark でパケットを確認しましたが、実際には 5 バイトのパケットが送信されています。
ただし、QTCPSocket
Mac (実際にはまったく同じコード) で使用すると、毎回個別のパケットが取得され、送信された 1 バイト パケットはすべて 1 バイト パケットとして到着します。これは素晴らしいことです。
生の Windows ソケット (を使用しないQTCPSocket
) を作成してみましたが、Windows と同じ動作をQTCPSocket
します。
Mac ソケットがはるかに高い時間分解能でパケットを受信する原因となる違いは何ですか? setsockopt()
この 200 ミリ秒のバッファリングが発生しないように設定できるものはありますか?
サーバー側で設定することでおそらく問題が解決することは承知していTCP_NODELAY
ますが、Mac TCP クライアントが意図したとおりに動作することを考えると、Windows でも同じ動作を得る方法があるはずです。