web-dev-qa-db-ja.com

ソケットに読み書きできるデータのサイズ

Linuxソケットでサポートされている最大サイズを見つける簡単な方法があるかどうか疑問に思いましたか? (これは構成可能ですか?構成可能な場合はどこですか?)

たとえば、Webで見つかったソケットの例のほとんどは、「Hello Socket」またはその他の小さな文字列を送信しますが、War And Peace全体をソケットに入れると、いつ壊れますか?

すべてがファイルなので、最大ファイルサイズですか?ソケットが異なるファイルシステムを接続する場合、どのように調整されますか?

私はストリームソケットに最も興味があります。

5
NWS

net.core.rmem_maxおよびnet.core.wmem_maxはあなたのものです。あなたはそれらの値をで調べることができます

# sysctl net.core.rmem_max

そしてそれらを設定します

# sysctl -w net.core.rmem_max=8388608

これらは、それぞれ受信時と送信時のソケットバッファサイズです。デフォルト値もあります-rmem_defaultおよびwmem_default

6
user18469

ソケットの種類は言わなかった。

ストリームソケット

(定義により)無制限の量のデータを送信できます。すべてを一度にバッファリングまたは送信できない場合、または受信者が一度にすべてを受信できない場合、送信はブロックするか(ソケットをブロックする場合)、書き込まれたバイト数の一部を返すか、EAGAIN(非ブロックソケットの場合)を返します。 )。

データグラムソケット

プロトコルによって異なります。 UDPv4は、データグラムあたり65536バイトのみをサポートします。 UDPv6はさらに多くをサポートします。 UNIXドメインソケットはおそらくさらに多くをサポートします。この場合、おそらくメモリによって制限されているだけです。

7
Celada