我在Linux内核中实现了自定义传输层数据报协议。我已经在有损环境中实现了发送和接收队列以便按顺序交付。
我注意到,在我当前的实现中,我的套接字内存不足,只有16个套接字缓冲区,队列中有BUFSIZ有效负载。所以我需要增加分配给套接字的内存值。
我认为更改sk->sk_sendbuf
和sk->sk_rcvbuf
的值应该可以胜任。这样做的正确方法是什么?
P.S.-我还没有为这个协议实现sysctl接口,所以不能用它来进行内存管理。
感谢。
答案 0 :(得分:1)
事实证明,我不需要为我的协议手动定义sysctl接口。我只是在我的测试机器上使用了以下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
的两倍,这就是实现在内核中的方式。