diff --git a/mud.c b/mud.c index e8da289..eb17e00 100644 --- a/mud.c +++ b/mud.c @@ -29,6 +29,12 @@ #define MSG_CONFIRM 0 #endif +#if defined __linux__ +#define MUD_V4V6 1 +#else +#define MUD_V4V6 0 +#endif + #if defined IP_PKTINFO #define MUD_PKTINFO IP_PKTINFO #define MUD_PKTINFO_SRC(X) &((struct in_pktinfo *)(X))->ipi_addr @@ -776,7 +782,7 @@ mud_set_aes(struct mud *mud) } struct mud * -mud_create(struct sockaddr *addr, int v4, int v6) +mud_create(struct sockaddr *addr) { if (!addr) return NULL; @@ -786,14 +792,19 @@ mud_create(struct sockaddr *addr, int v4, int v6) if (now >> 48) return NULL; + int v4, v6; socklen_t addrlen = 0; switch (addr->sa_family) { case AF_INET: addrlen = sizeof(struct sockaddr_in); + v4 = 1; + v6 = 0; break; case AF_INET6: addrlen = sizeof(struct sockaddr_in6); + v4 = MUD_V4V6; + v6 = 1; break; default: return NULL; @@ -808,7 +819,6 @@ mud_create(struct sockaddr *addr, int v4, int v6) return NULL; memset(mud, 0, sizeof(struct mud)); - mud->fd = socket(addr->sa_family, SOCK_DGRAM, IPPROTO_UDP); if ((mud->fd == -1) || diff --git a/mud.h b/mud.h index 71fa0d7..bdb9d2f 100644 --- a/mud.h +++ b/mud.h @@ -5,7 +5,7 @@ struct mud; struct sockaddr; -struct mud *mud_create (struct sockaddr *, int, int); +struct mud *mud_create (struct sockaddr *); void mud_delete (struct mud *); int mud_get_fd (struct mud *);