aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/socket_default/socket_default_socket.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2013-04-11 20:22:06 +0200
committerMartin Willi <martin@revosec.ch>2013-05-06 16:10:11 +0200
commitdc35d097b3723d10591cce4949b15ba825b05ef8 (patch)
tree8dff3cc628321ca351dc7b64952a6d6522d8cd0a /src/libcharon/plugins/socket_default/socket_default_socket.c
parenta30727fe2b0d1d4c83aae7b00351e529ddef536b (diff)
downloadstrongswan-dc35d097b3723d10591cce4949b15ba825b05ef8.tar.bz2
strongswan-dc35d097b3723d10591cce4949b15ba825b05ef8.tar.xz
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.
Diffstat (limited to 'src/libcharon/plugins/socket_default/socket_default_socket.c')
-rw-r--r--src/libcharon/plugins/socket_default/socket_default_socket.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/libcharon/plugins/socket_default/socket_default_socket.c b/src/libcharon/plugins/socket_default/socket_default_socket.c
index 9c1bce303..a9c298362 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)
{