我想知道是否有一种简单的方法可以找到 Linux 套接字支持的最大大小? (这是可配置的吗?如果可以的话在哪里?)
例如,网络上找到的大多数套接字示例都会发送“Hello Socket”或其他一些小字符串,但是如果我将整个战争与和平插入插座,什么时候会断?
既然一切都是文件,那么它是最大文件大小吗? socket连接不同文件系统时是如何协调的?
我对流套接字最感兴趣。
答案1
你没有说什么类型的套接字。
流套接字
您可以发送(根据定义)无限量的数据。如果不能一次性全部缓冲或发送,或者接收方不能一次接收全部数据,则发送将阻塞(对于阻塞套接字)或返回部分写入的字节数或EAGAIN
(对于非阻塞套接字)。
数据报套接字
这取决于协议。 UDPv4 仅支持每个数据报 65536 字节。 UDPv6 支持更多。 UNIX 域套接字可能支持更多:在这种情况下,您可能只是受到内存的限制。
答案2
net.core.rmem_max
是net.core.wmem_max
你的事。您可以检查它们的值
# sysctl net.core.rmem_max
并将它们设置为
# sysctl -w net.core.rmem_max=8388608
这些分别是接收和发送时的套接字缓冲区大小。它们也有默认值 -rmem_default
和wmem_default
。