Default to IPv4 if IPv6 not supported

This commit is contained in:
Martin Pulec
2019-05-24 22:00:30 +02:00
parent 553f73f7a6
commit d8bc463178
3 changed files with 16 additions and 0 deletions

View File

@@ -939,6 +939,11 @@ int main(int argc, char *argv[])
audio_host = requested_receiver;
}
if (!is_ipv6_supported()) {
log_msg(LOG_LEVEL_WARNING, "IPv6 support missing, setting IPv4-only mode.\n");
force_ip_version = 4;
}
if (!set_output_buffering()) {
log_msg(LOG_LEVEL_WARNING, "Cannot set console output buffering!\n");
}

View File

@@ -297,3 +297,13 @@ bool get_local_addresses(struct sockaddr_storage *addrs, size_t *len, int ip_ver
#endif
}
bool is_ipv6_supported(void)
{
int fd = socket(AF_INET6, SOCK_DGRAM, 0);
if (fd == INVALID_SOCKET && errno == EAFNOSUPPORT) {
return false;
}
CLOSESOCKET(fd);
return true;
}

View File

@@ -48,6 +48,7 @@ bool is_addr_loopback(struct sockaddr *sa);
bool is_host_loopback(const char *hostname);
uint16_t socket_get_recv_port(int fd);
bool get_local_addresses(struct sockaddr_storage *addrs, size_t *len, int ip_version);
bool is_ipv6_supported(void);
#ifdef WIN32
#define CLOSESOCKET closesocket