From: Martin Willi Date: Thu, 11 Apr 2013 18:22:06 +0000 (+0200) Subject: socket-default: to bind to one dynamic port on OS X, create v4 socket before v6 X-Git-Tag: 5.1.0dr1~153^2~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc35d097b3723d10591cce4949b15ba825b05ef8;p=thirdparty%2Fstrongswan.git socket-default: to bind to one dynamic port on OS X, create v4 socket before v6 It seems that the order of binding sockets of different address families to the same dynamic port must be v6-before-v4 on Linux, but v4-before-v6 on OS X. --- diff --git a/src/libcharon/plugins/socket_default/socket_default_socket.c b/src/libcharon/plugins/socket_default/socket_default_socket.c index 9c1bce303a..a9c298362f 100644 --- a/src/libcharon/plugins/socket_default/socket_default_socket.c +++ b/src/libcharon/plugins/socket_default/socket_default_socket.c @@ -692,9 +692,15 @@ socket_default_socket_t *socket_default_socket_create() } /* we allocate IPv6 sockets first as that will reserve randomly allocated - * ports also for IPv4 */ + * ports also for IPv4. On OS X, we have to do it the other way round + * for the same effect. */ +#ifdef __APPLE__ + open_socketpair(this, AF_INET, &this->ipv4, &this->ipv4_natt, "IPv4"); + open_socketpair(this, AF_INET6, &this->ipv6, &this->ipv6_natt, "IPv6"); +#else /* !__APPLE__ */ open_socketpair(this, AF_INET6, &this->ipv6, &this->ipv6_natt, "IPv6"); open_socketpair(this, AF_INET, &this->ipv4, &this->ipv4_natt, "IPv4"); +#endif /* __APPLE__ */ if (this->ipv4 == -1 && this->ipv6 == -1) {