0

サイズが異なるデータを受け取る Python の socket.socket クラスを使用してクライアントを構築しています (通常は 500 ~ 5,000 バイトですが、理論的にはクライアント ソケットが 500,000 バイトを受け取ることは可能です)。また、このクライアント ソケットと通信するサーバーも作成しています。

次のように、絶対に超えないと確信できる最大バイトサイズを設定するリスクは何ですか?

socket.recv(1000000)

これがソケットの実際の使用量の 99% よりもはるかに大きいことはわかっていますが。

4

2 に答える 2

2

あなたがしているのは、壮大なスケールでメモリを浪費しているだけです。

  1. 最大速度で読んでいる場合、パス MTU を超えることはありません。通常は 1500 バイト未満であり、メガバイトではなくキロバイトで測定されます。

  2. 最大速度で読み取っていない場合は、カーネル内にソケット受信バッファーが既にあり、プラットフォームに応じて 8 ~ 64k の範囲のサイズであり、TCP の操作により、recv() は完全に不可能です。そのバッファにあるよりも多くのデータを配信します。

于 2013-04-19T09:00:50.200 に答える