我正在使用单个原始套接字从1024个端口读取本地测试网络的UDP数据包。每个UDP src和dest端口都是唯一的,我需要访问IP和UDP头字段。我可以在linux-rt内核中以100 mbps的速度流式传输和处理数据(输入和输出),抖动非常低< 250 usec,10 usec nominal。
我想阻止内核将ICMP端口不可达错误发送回发送主机,但是,由于资源限制,我不想创建1024个vanilla UDP套接字并绑定到每个套接字。目前,我正在使用iptables删除出站端口不可达消息。有没有人知道一种方法(程序化使用C代码)来防止ICMP无法访问的流量?也许是IOCTL或套接字选项?我也尝试过更改/ proc / sys / net / ipv4 / icmp_ratelimit,但这似乎没有任何效果。默认情况下,为dest目标不可达设置ratemask,并且各种ratelimit值不会改变我可以看到的任何行为。