Commit e5454831 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Fix spurious "please select network protocol manually" error

getaddrinfo() may list IPv4 before IPv6 depending on system
configuration.
parent 2c5de8fc
...@@ -164,6 +164,7 @@ static int net_ListenSingle (vlc_object_t *obj, const char *host, int port, ...@@ -164,6 +164,7 @@ static int net_ListenSingle (vlc_object_t *obj, const char *host, int port,
val = -1; val = -1;
int fd6 = -1;
for (const struct addrinfo *ptr = res; ptr != NULL; ptr = ptr->ai_next) for (const struct addrinfo *ptr = res; ptr != NULL; ptr = ptr->ai_next)
{ {
int fd = net_Socket (obj, ptr->ai_family, ptr->ai_socktype, int fd = net_Socket (obj, ptr->ai_family, ptr->ai_socktype,
...@@ -174,18 +175,34 @@ static int net_ListenSingle (vlc_object_t *obj, const char *host, int port, ...@@ -174,18 +175,34 @@ static int net_ListenSingle (vlc_object_t *obj, const char *host, int port,
continue; continue;
} }
if (ptr->ai_next != NULL)
{
#ifdef IPV6_V6ONLY #ifdef IPV6_V6ONLY
if ((ptr->ai_family != AF_INET6) /* If IPv6 was forced, set IPv6-only mode.
|| setsockopt (fd, SOL_IPV6, IPV6_V6ONLY, &(int){ 0 }, * If IPv4 was forced, do nothing extraordinary.
sizeof (int))) * If nothing was forced, try dual-mode IPv6. */
#endif if (ptr->ai_family == AF_INET6)
{ {
msg_Err (obj, "Multiple network protocols present"); int on = (family == AF_INET6);
msg_Err (obj, "Please select network protocol manually"); setsockopt (fd, SOL_IPV6, IPV6_V6ONLY, &on, sizeof (on));
} }
else if (ptr->ai_family == AF_INET && family == AF_UNSPEC)
{
for (const struct addrinfo *p = ptr; p != NULL; p = p->ai_next)
if (p->ai_family == AF_INET6)
{
net_Close (fd);
fd = -1;
break;
}
if (fd == -1)
continue;
}
#else
if (family == AF_UNSPEC && ptr->ai_next != NULL)
{
msg_Warn (obj, "ambiguous network protocol specification");
msg_Warn (obj, "please select IP version explicitly");
} }
#endif
fd = net_SetupDgramSocket( obj, fd, ptr ); fd = net_SetupDgramSocket( obj, fd, ptr );
if( fd == -1 ) if( fd == -1 )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment