Bläddra i källkod

obs-outputs: Prefer IPv4 addresses for RTMP connections

Richard Stanway 9 år sedan
förälder
incheckning
eca0ca8424
1 ändrade filer med 15 tillägg och 2 borttagningar
  1. 15 2
      plugins/obs-outputs/librtmp/rtmp.c

+ 15 - 2
plugins/obs-outputs/librtmp/rtmp.c

@@ -695,10 +695,10 @@ add_addr_info(struct sockaddr_storage *service, socklen_t *addrlen, AVal *host,
         goto finish;
     }
 
-    // they should come back in OS preferred order
+    // prefer ipv4 results, since lots of ISPs have broken ipv6 connectivity
     for (ptr = result; ptr != NULL; ptr = ptr->ai_next)
     {
-        if (ptr->ai_family == AF_INET || ptr->ai_family == AF_INET6)
+        if (ptr->ai_family == AF_INET)
         {
             memcpy(service, ptr->ai_addr, ptr->ai_addrlen);
             *addrlen = (socklen_t)ptr->ai_addrlen;
@@ -706,6 +706,19 @@ add_addr_info(struct sockaddr_storage *service, socklen_t *addrlen, AVal *host,
         }
     }
 
+	if (!*addrlen)
+	{
+		for (ptr = result; ptr != NULL; ptr = ptr->ai_next)
+		{
+			if (ptr->ai_family == AF_INET6)
+			{
+				memcpy(service, ptr->ai_addr, ptr->ai_addrlen);
+				*addrlen = (socklen_t)ptr->ai_addrlen;
+				break;
+			}
+		}
+	}
+
     freeaddrinfo(result);
 
     if (service->ss_family == AF_UNSPEC || *addrlen == 0)