我正在 Linux 内核中实现自定义传输层数据报协议(protocol)。我已经实现了发送和接收队列,以便在有损环境中按顺序交付。
我注意到,在我当前的实现中,我的套接字内存不足,队列中只有 16 个套接字缓冲区和 BUFSIZ 有效负载。所以我需要增加分配给我的套接字的内存值。
我想改变 sk->sk_sendbuf
的值和 sk->sk_rcvbuf
应该做的工作。这样做的正确方法是什么?
P.S.-我还没有为这个协议(protocol)实现 sysctl 接口(interface),所以不能用它来管理内存。
谢谢。
最佳答案
事实证明,我不需要为我的协议(protocol)手动定义 sysctl 接口(interface)。我刚刚在我的测试机器上使用了以下 sysctl 命令来增加分配给每个套接字的内存量
sysctl -w net.core.wmem_default=<new_value>
sysctl -w net.core.wmem_max=<new_value>
选择
new_value
,我首先检查了这些参数的现有值sysctl -n net.core.wmem_default
sysctl -n net.core.wmem_max
请注意,分配给套接字的实际内存将是
new_value
的两倍。 ,这就是内核中的实现方式。
关于sockets - 如何在 Linux 内核中增加套接字内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39897030/