2.UDP到了服务器,但是socket只收到了部分报文,排查流程
2.1 确认报文是否完整到达服务器,tcpdump抓包。
2.2 检查接收缓冲区大小
2.2.1 应用程序缓冲区不足.
2.2.2 内核接收缓冲区限制.
sysctl -w net.core.rmem_default=4194304
sysctl -w net.core.rmem_max=4194304
2.3 分片问题(MTU限制)
2.4 未正确处理截断.
2.5 系统配置问题.
3.setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char *) &size, sizeof(size)):
3.1 通过 setsockopt
设置的值不能超过 /proc/sys/net/core/rmem_max
(默认通常为 212992
,约 208 KB)。
3.2 必须在 绑定(bind
)或连接(connect
)之前 调用 setsockopt
,否则设置可能不生效。