Linuxソケットでサポートされている最大サイズを見つける簡単な方法があるかどうか疑問に思いましたか? (これは構成可能ですか?構成可能な場合はどこですか?)
たとえば、Webで見つかったソケットの例のほとんどは、「Hello Socket」またはその他の小さな文字列を送信しますが、War And Peace全体をソケットに入れると、いつ壊れますか?
すべてがファイルなので、最大ファイルサイズですか?ソケットが異なるファイルシステムを接続する場合、どのように調整されますか?
私はストリームソケットに最も興味があります。
net.core.rmem_max
およびnet.core.wmem_max
はあなたのものです。あなたはそれらの値をで調べることができます
# sysctl net.core.rmem_max
そしてそれらを設定します
# sysctl -w net.core.rmem_max=8388608
これらは、それぞれ受信時と送信時のソケットバッファサイズです。デフォルト値もあります-rmem_default
およびwmem_default
。
ソケットの種類は言わなかった。
(定義により)無制限の量のデータを送信できます。すべてを一度にバッファリングまたは送信できない場合、または受信者が一度にすべてを受信できない場合、送信はブロックするか(ソケットをブロックする場合)、書き込まれたバイト数の一部を返すか、EAGAIN
(非ブロックソケットの場合)を返します。 )。
プロトコルによって異なります。 UDPv4は、データグラムあたり65536バイトのみをサポートします。 UDPv6はさらに多くをサポートします。 UNIXドメインソケットはおそらくさらに多くをサポートします。この場合、おそらくメモリによって制限されているだけです。