Set Dont-Fragment for various os

This commit is contained in:
Erik Ekman 2009-03-07 00:01:00 +00:00
parent cd9c6bbb82
commit d8cb5bdcd7
2 changed files with 18 additions and 1 deletions

View file

@ -130,6 +130,10 @@ open_dns(int localport, in_addr_t listen_ip)
setsockopt(fd, IPPROTO_IP, DSTADDR_SOCKOPT, (const void*) &flag, sizeof(flag));
#endif
/* Set dont-fragment ip header flag */
flag = DONT_FRAG_VALUE;
setsockopt(fd, IPPROTO_IP, IP_OPT_DONT_FRAG, (const void*) &flag, sizeof(flag));
if(bind(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0)
err(1, "bind");

View file

@ -19,7 +19,6 @@
#ifdef WINDOWS32
#include "windows.h"
#include <winsock.h>
#else
#include <sys/socket.h>
#include <err.h>
@ -45,6 +44,20 @@
# define dstaddr(x) (&(((struct in_pktinfo *)(CMSG_DATA(x)))->ipi_addr))
#endif
#if defined IP_MTUDISC
# define IP_OPT_DONT_FRAG IP_MTUDISC
# define DONT_FRAG_VALUE 1
#elif defined IP_MTU_DISCOVER
# define IP_OPT_DONT_FRAG IP_MTU_DISCOVER
# define DONT_FRAG_VALUE IP_PMTUDISC_DO
#elif defined IP_DONTFRAG
# define IP_OPT_DONT_FRAG IP_DONTFRAG
# define DONT_FRAG_VALUE 1
#elif defined IP_DONTFRAGMENT
# define IP_OPT_DONT_FRAG IP_DONTFRAGMENT
# define DONT_FRAG_VALUE 1
#endif
struct packet
{
int len; /* Total packet length */