私はある既知のフォーマットでUDPを介してメッセージを送信するアプリを持っています。これらのメッセージが送信される速度を知りたいのですが。明確にするために、私はデータレートについてあまり気にすることができませんでした - それはループバックです、それでそれは無限大+ 1の近くのどこかです - 私が彼がどれくらい頻繁に知る必要があるもの 完全なメッセージ 外出する。
私はある既知のフォーマットでUDPを介してメッセージを送信するアプリを持っています。これらのメッセージが送信される速度を知りたいのですが。明確にするために、私はデータレートについてあまり気にすることができませんでした - それはループバックです、それでそれは無限大+ 1の近くのどこかです - 私が彼がどれくらい頻繁に知る必要があるもの 完全なメッセージ 外出する。
回答:
「メッセージ」によって「データグラム」を意味する場合、答えは100%です。 UDPデータグラムは送信されるかされないかのどちらかであり、そして到着するかしないかのどちらかです。あなたは絶対にいけない recvfrom()
UDPデータグラムの一部だけ。データグラムがネットワークMTUよりも大きくなってしまうと、IP層で断片化される可能性がありますが、フラグメントがドロップされると、データグラム全体が部分的なメッセージではなくドロップされます。
ループバックの速度は無限大ではありません。CPUによって制限されます。データの送信速度が速すぎると、発信UDPバッファがいっぱいになります。それからあなたがしようとすると sendto()
残りのバッファスペースに収まるには大きすぎるデータグラムは、次のようなエラーになります。 EAGAIN
、 ENOBUFS
または EMSGSIZE
実装によって異なります。受信機が電話をかけた場合 recvfrom()
ゆっくりすると、その入力バッファはいっぱいになり、データグラムは静かに破棄されます。
より関連性のある質問は、実際に受信された送信データグラムの割合です。 CPU飽和をかなり下回るレートでは、これはループバックで100%になるはずです。しかし、CPUの飽和状態に近づくとき、または受信側がデータグラムの読み取りに時間がかかる場合は、任意に低くなる可能性があります。