aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/network/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/charon/network/socket.c')
-rw-r--r--src/charon/network/socket.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/charon/network/socket.c b/src/charon/network/socket.c
index ba01702cb..c42c9cd10 100644
--- a/src/charon/network/socket.c
+++ b/src/charon/network/socket.c
@@ -308,9 +308,9 @@ static status_t build_interface_list(private_socket_t *this, u_int16_t port)
int skt;
interface_t *interface;
- if (current->sin_family != AF_INET)
+ if (current->sin_family != AF_INET && current->sin_family != AF_INET6)
{
- /* ignore all but AF_INET interfaces */
+ /* ignore all but IPv4 and IPv6 interfaces */
continue;
}
@@ -334,7 +334,7 @@ static status_t build_interface_list(private_socket_t *this, u_int16_t port)
}
/* set up interface socket */
- skt = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
+ skt = socket(current->sin_family, SOCK_RAW, IPPROTO_UDP);
if (socket < 0)
{
this->logger->log(this->logger, ERROR, "unable to open interface socket!");
@@ -347,7 +347,7 @@ static status_t build_interface_list(private_socket_t *this, u_int16_t port)
continue;
}
current->sin_port = htons(port);
- current->sin_family = AF_INET;
+
if (bind(skt, (struct sockaddr*)current, sizeof(struct sockaddr_in)) < 0)
{
this->logger->log(this->logger, ERROR, "unable to bind interface socket!");