2016-07-15 13 views
0

私はLinuxベースの無線ネットワークアプリケーションを用意しています。すなわち、データパケットの遅れた到着は全くデータなしと比較してもそれほど良好ではない。また、ソケット内の古いデータは、新しいデータだけを遅延させることができます。待ち時間を減らすためにtx udpソケットカーネルバッファをフラッシュする

私は、送信側から古いデータが積み重なっていることを検出する手段があるかどうかを調べています。そのような場合は、そのデータをフラッシュ/破棄して新しいデータを送信します。

私は受信機が古いデータをすべて読み取って破棄できることを知っています。しかし、これは引き続き追いつくようになり、スピードアップにはあまり役立ちません。また、送信側で評価するオプションがある場合にも役立ちます。

ありがとうございました。

+0

カーネルはすでに送信バッファからデータをできるだけ早く送信しており、ネットワークは必要なときにすでにデータを破棄しています。 – EJP

+0

@EJP、ありがとう!はい、バッファを即座に送信しようとしていますが、接続が切断されて再接続されている間に、カーネルは古いデータを最初に送信し、パケットをドロップしてアプリケーション空間にドロップしてから新しいデータで開始します。私は、古いデータを完全にフラッシュすることによって新しいデータにジャンプする方法があることを望んでいました。 – Ananth

+0

現在、debugxを使用してtxキューを読み取り、設定された上限しきい値に基づいて、キューにデータを追加せず、新しいデータを入れる前にtxキューが低いウォーターマークに達するまで待ってから古いデータをストリームに追加します。 txキューが上限スレッシュホールドに達した場合にただちに廃棄する方法を見つける必要があり、すぐにキューの底に当たってしまいます。 – Ananth

答えて

-1

送信側のNagleアルゴリズムをオフにしてみてください。このアルゴリズムは、より小さなパケットを大きなパケットに集めてオーバーヘッドを減らそうとします。これをオフにすると、各パケットがすぐに送信されます。

void noNagle (int socket) 
{ 
     int on = 1; 
     if (setsockopt (socket, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) < 0) 
      bye ("Can not disable nagle algorithm\n"); 
} 
+0

NagleアルゴリズムはUDPではなくTCPの一部です。 – EJP

+0

かなり正しい...申し訳ありません。 – pidloop

関連する問題