如何更改don';Erlang中UDP数据包的t片段(DF)标志?

如何更改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

在Erlang中,发送
UDP
数据包非常简单,即使用
gen\u UDP:open()
创建套接字,然后使用
gen\u UDP:send()
发送数据

但是,默认情况下,如果IP数据包的大小不超过MTU大小,Linux
TCP/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
的详细帮助:

谢谢