-1

winsock次の問題は、 TCP ソケット接続に適用されます。

すでに送信されたがキューに入れられた内部 winsock バッファを破棄して、ワイヤの品質が再び良くなった場合 (つまり、ノイズの多い WLAN 接続) に送信されないようにする方法はありますか。データを送信しない理由は、古いビデオ ライブ ストリーム フレームを送信しても意味がないためです。古いフレームはすべて破棄して、最新のフレームのみが送信されるようにする必要があります。

SO_SNDBUF がゼロに設定されている場合、バッファは破棄されますか?

編集:ここでは UDP の方が適していることはわかっていますが、UDP の使用に反対する理由がいくつかあります。

  • パケットの組み立て
  • パケットの順序付け
  • 設計上の決定

特に順序付けには、アプリケーション側で追加のバッファリングが必要です。処理済みのフレーム番号よりも小さいフレーム番号のパケットを破棄するアプローチも考えられますが、これにより、大量のフレームが破棄される状況が発生する可能性があります。

4

2 に答える 2

0

いいえ、データをオペレーティング システムに渡した後は、オペレーティング システムがそのデータを所有し、データを相手に配信するために最善を尽くします。そのデータを変更または削除することはできません。

あなたができることは、オペレーティングシステムがそれほど多くのデータをキューに入れないように、送信バッファサイズを小さくすることです-むしろ、アプリケーションでデータを自分でキューに入れます。アプリケーションでキューを制御し、そのデータを破棄できます。送信バッファーが小さすぎるとスループットが低下する可能性があるため、微調整が必​​要です。

于 2013-09-17T07:17:55.050 に答える
0

カーネル空間に入らないわけではありません。どのように対処しますか?この時点では、すべてのプロセスからのデータが混在しているため、何を送信して何を送信しないかを判断するのは困難です。何らかの API が存在する場合でも、プロセスは少なくともこのようなことを行う特権を持っている必要があります。

また、なぜビデオ TCP を送信しているのですか? パフォーマンスが心配な場合 (古いフレームの処理で立ち往生しないようにするなど)、UDP を選択することをお勧めします。

于 2013-09-17T07:14:10.097 に答える