回答編集履歴
3
update
test
CHANGED
@@ -19,3 +19,11 @@
|
|
19
19
|
|
20
20
|
|
21
21
|
UDP送信処理という観点からは、上記のような微妙なタイミング制御には意味があります。データグラム欠損を極力避けるには、UDP送信側はなるべく一定間隔でのデータ送信を行うよう制御し(バースト的な送出処理は避ける)、UDP受信側は可能な限り最速でネットワークスタックからデータを取り出す(`recvfrom`とその後の解析処理を分離するなど)必要があります。
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
> しかし速度を重視してUDPを採用したので,可能であれば無意味な処理を使用せず実行したいと考えている.
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
(気持ちは分かりますが)UDP通信路全体でみると全くの**逆効果**です。送信側だけの都合で最速処理すると、既に説明したようなデータグラム欠損があちこちで生じてしまいます。
|
2
update
test
CHANGED
@@ -10,4 +10,12 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
`SO_SNDBUF`や`SO_RCVBUF`により送受信バッファサイズを大きくすれば、UDPデータグラムの取りこぼしが多少は減る可能性があります。
|
13
|
+
`SO_SNDBUF`や`SO_RCVBUF`により送受信バッファサイズを大きくすれば、UDPデータグラムの取りこぼしが多少は減る可能性があります。
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
> 送信のforループの中に無意味な処理("for (int h = 0; h < 1000000; h++)")を追加して送信の間隔を空けた場合
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
UDP送信処理という観点からは、上記のような微妙なタイミング制御には意味があります。データグラム欠損を極力避けるには、UDP送信側はなるべく一定間隔でのデータ送信を行うよう制御し(バースト的な送出処理は避ける)、UDP受信側は可能な限り最速でネットワークスタックからデータを取り出す(`recvfrom`とその後の解析処理を分離するなど)必要があります。
|
1
update
test
CHANGED
@@ -6,8 +6,8 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
質問者さんが言及している通り、UDPは**あらゆるレイヤで**データグラム欠損が起きうる通信プロトコルです。実
|
9
|
+
質問者さんが言及している通り、UDPは**あらゆるレイヤで**データグラム欠損が起きうる通信プロトコルです。実ネットワーク上でのパケット・ロス発生以外にも、NIC内部で破損検知したデータグラムを破棄したり、ネットワークスタック内部の送受信バッファ不足によりデータグラムを破棄することもあります。
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
`SO_SNDBUF`や`SO_RCVBUF`により送受信バッファサイズを大きくすれば、UDPデータグラムの取りこぼしが多少は減る可能性があります。
|
13
|
+
`SO_SNDBUF`や`SO_RCVBUF`により送受信バッファサイズを大きくすれば、UDPデータグラムの取りこぼしが多少は減る可能性があります。それ以外の方策としては、UDP送信側はなるべく一定間隔でのデータ送信を行うよう制御し(バースト的な送出処理は避ける)、UDP受信側は可能な限り最速でネットワークスタックからデータを取り出す(`recvfrom`とその後の解析処理を分離するなど)必要があります。
|