diff --git a/src/common.c b/src/common.c index a2d23f8..8511498 100644 --- a/src/common.c +++ b/src/common.c @@ -130,9 +130,11 @@ open_dns(int localport, in_addr_t listen_ip) setsockopt(fd, IPPROTO_IP, DSTADDR_SOCKOPT, (const void*) &flag, sizeof(flag)); #endif +#ifdef IP_OPT_DONT_FRAG /* Set dont-fragment ip header flag */ flag = DONT_FRAG_VALUE; setsockopt(fd, IPPROTO_IP, IP_OPT_DONT_FRAG, (const void*) &flag, sizeof(flag)); +#endif if(bind(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) err(1, "bind"); diff --git a/src/common.h b/src/common.h index a6d1137..f39461a 100644 --- a/src/common.h +++ b/src/common.h @@ -44,16 +44,16 @@ # 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 +#if defined IP_MTU_DISCOVER + /* Linux */ # define IP_OPT_DONT_FRAG IP_MTU_DISCOVER # define DONT_FRAG_VALUE IP_PMTUDISC_DO #elif defined IP_DONTFRAG + /* FreeBSD */ # define IP_OPT_DONT_FRAG IP_DONTFRAG # define DONT_FRAG_VALUE 1 #elif defined IP_DONTFRAGMENT + /* Winsock2 */ # define IP_OPT_DONT_FRAG IP_DONTFRAGMENT # define DONT_FRAG_VALUE 1 #endif