event/ServerSocket: don't abort if IPv6 is not available

First check if an IPv6 socket can be created.
This commit is contained in:
Max Kellermann
2013-11-04 23:36:00 +01:00
parent ecf12a60e8
commit 7bca61f5bb
2 changed files with 20 additions and 1 deletions

View File

@@ -339,6 +339,7 @@ ServerSocket::AddPortIPv4(unsigned port)
}
#ifdef HAVE_IPV6
inline void
ServerSocket::AddPortIPv6(unsigned port)
{
@@ -349,6 +350,22 @@ ServerSocket::AddPortIPv6(unsigned port)
AddAddress((const sockaddr &)sin, sizeof(sin));
}
/**
* Is IPv6 supported by the kernel?
*/
gcc_pure
static bool
SupportsIPv6()
{
int fd = socket(AF_INET6, SOCK_STREAM, 0);
if (fd < 0)
return false;
close(fd);
return true;
}
#endif /* HAVE_IPV6 */
#endif /* HAVE_TCP */
@@ -363,7 +380,8 @@ ServerSocket::AddPort(unsigned port, Error &error)
}
#ifdef HAVE_IPV6
AddPortIPv6(port);
if (SupportsIPv6())
AddPortIPv6(port);
#endif
AddPortIPv4(port);