如何更改don';Erlang中UDP数据包的t片段(DF)标志?
在Erlang中,发送如何更改don';Erlang中UDP数据包的t片段(DF)标志?,erlang,udp,mtu,ip-fragmentation,Erlang,Udp,Mtu,Ip Fragmentation,在Erlang中,发送UDP数据包非常简单,即使用gen\u UDP:open()创建套接字,然后使用gen\u UDP:send()发送数据 但是,默认情况下,如果IP数据包的大小不超过MTU大小,LinuxTCP/IP堆栈将在IP头中设置不分段(DF)标志。如果大小超过MTU大小,则UDP数据包将被分段 是否有某种方法不仅为UDP数据包设置DF标志 我知道在C语言中,下面的代码可以用来清除DF标志。但我在二郎找不到路 int optval=0; if(-1 == setsockopt(soc
UDP
数据包非常简单,即使用gen\u UDP:open()
创建套接字,然后使用gen\u UDP:send()
发送数据
但是,默认情况下,如果IP数据包的大小不超过MTU大小,LinuxTCP/IP
堆栈将在IP头中设置不分段(DF)标志。如果大小超过MTU
大小,则UDP
数据包将被分段
是否有某种方法不仅为UDP
数据包设置DF标志
我知道在C语言中,下面的代码可以用来清除DF标志。但我在二郎找不到路
int optval=0;
if(-1 == setsockopt(sockfd,IPPROTO_IP,IP_MTU_DISCOVER,&optval,sizeof(optval))) {
printf("Error: setsockopt %d\n",errno);
exit(1);
}
谢谢在我发布了这个问题后,我找到了解决方案:-(…:-) 解决方案是使用
inet:setopts()
设置套接字原始选项,就像在C语言中所做的那样,但区别在于您需要知道IPPROTO\u IP
和IP\u MTU\u DISCOVER
的定义
IPPROTO_IP
的值为0,在netinet/in.h中定义
IP\u MTU\u DISCOVER
的值是10,在linux/in.h中定义
下面是一个例子。
inet:setopts(套接字,[{raw,0,10,}])
我已经用小程序测试过了,它正在工作
您可以在erlang手册页上找到有关inet:setopts
的详细帮助:
谢谢