ソケット通信のバッファサイズについて


UDPのソケット通信をC++で実装しています。

受信バッファサイズの設定方法がわかりません。どの程度のバッファを送信したかを確認するツールなどはありますでしょうか。

作る際に参考にしたページのコードでは2048bitに設定しています。

[UDP / IP でパケットの送受信を行う](https://hensa40.cutegirl.jp/archives/780)

環境  
Ubuntu 20.04 LTS




短い答え  
バッファサイズは 2048 バイトでよいです

長い答え  
Ethernet 上での UDP パケットの最大サイズは MTU で決めてよいです。 MTU の最大値は 1500 byte ないし PPPoE
等が入ると小さくなって 1492 だったり 1454 だったりします。なので「１回で転送できる最大バイト数」は 1454 としておくのが無難です。

バッファサイズは 1454 より大きい値であればいいので、いくつでもいいです。極端な話、１ギガバイトのバッファを用意して 1454
バイトしか使わないというのもアリです。無意味ですが。あとは CPU の L1/L2/L3
キャッシュの境界にうまく載るように（コンパイラや実行環境が載せてくれることを期待して）２のべき乗サイズにしておくのが無難で、となると 1454
以上の２のべきは 2048 だからこれを採用しておけば十分です。

ローカルイントラネットで全機器がジャンボフレーム対応なら MTU
を大きくできますが、では具体的にいくつにするとよいかは機器によって違うので最適値は現場によって異なります。いちいち調査してられないので、ソフト作成側はそんなことは気にせず
MTU=1454 バイトを採用しておけば十分。

UDP を Ethernet 上で実装するなら UDP
は成功するか失敗するかしかありえないので「どの程度のバッファを送信したか」なんてものは意味がありません。受信側から見て、転送が成功するか失敗するかしかないです。成功時は
`sendto()` で送ったバイト数が正確に得られ、失敗時は何も得られません（成功か失敗かすら不明）

