[FFmpeg-cvslog] r10881 - trunk/libavformat/udp.c

lucabe subversion
Wed Oct 31 08:02:31 CET 2007


Author: lucabe
Date: Wed Oct 31 08:02:30 2007
New Revision: 10881

Log:
Resolve hosts and bind sockets even when the local_port is not set (0)
Fixes ffserver on linux when "--disable-ipv6" is not used


Modified:
   trunk/libavformat/udp.c

Modified: trunk/libavformat/udp.c
==============================================================================
--- trunk/libavformat/udp.c	(original)
+++ trunk/libavformat/udp.c	Wed Oct 31 08:02:30 2007
@@ -111,7 +111,7 @@ static struct addrinfo* udp_ipv6_resolve
     struct addrinfo hints, *res = 0;
     int error;
     char sport[16];
-    const char *node = 0, *service = 0;
+    const char *node = 0, *service = "0";
 
     if (port > 0) {
         snprintf(sport, sizeof(sport), "%d", port);
@@ -120,7 +120,6 @@ static struct addrinfo* udp_ipv6_resolve
     if ((hostname) && (hostname[0] != '\0') && (hostname[0] != '?')) {
         node = hostname;
     }
-    if ((node) || (service)) {
         memset(&hints, 0, sizeof(hints));
         hints.ai_socktype = type;
         hints.ai_family   = family;
@@ -128,7 +127,6 @@ static struct addrinfo* udp_ipv6_resolve
         if ((error = getaddrinfo(node, service, &hints, &res))) {
             av_log(NULL, AV_LOG_ERROR, "udp_ipv6_resolve_host: %s\n", gai_strerror(error));
         }
-    }
     return res;
 }
 
@@ -155,7 +153,6 @@ static int udp_ipv6_set_local(URLContext
     char hbuf[NI_MAXHOST];
     struct addrinfo *res0 = NULL, *res = NULL;
 
-    if (s->local_port != 0) {
         res0 = udp_ipv6_resolve_host(0, s->local_port, SOCK_DGRAM, AF_UNSPEC, AI_PASSIVE);
         if (res0 == 0)
             goto fail;
@@ -164,23 +161,16 @@ static int udp_ipv6_set_local(URLContext
             if (udp_fd > 0) break;
             perror("socket");
         }
-    } else {
-        udp_fd = socket(s->dest_addr.ss_family, SOCK_DGRAM, 0);
-        if (udp_fd < 0)
-            perror("socket");
-    }
 
     if (udp_fd < 0)
         goto fail;
 
-    if (s->local_port != 0) {
         if (bind(udp_fd, res0->ai_addr, res0->ai_addrlen) < 0) {
             perror("bind");
             goto fail;
         }
         freeaddrinfo(res0);
         res0 = NULL;
-    }
 
     addrlen = sizeof(clientaddr);
     if (getsockname(udp_fd, (struct sockaddr *)&clientaddr, &addrlen) < 0) {




More information about the ffmpeg-cvslog mailing list