diff udp.c @ 2687:f4d24b10d33d libavformat

Resolve hosts and bind sockets even when the local_port is not set (0) Fixes ffserver on linux when "--disable-ipv6" is not used Patch by Nicolas George (nicolas dot george at normalesup dot org)
author lucabe
date Wed, 31 Oct 2007 07:02:30 +0000
parents 2298213e3016
children fffdcae6654c
line wrap: on
line diff
--- a/udp.c	Tue Oct 30 23:20:26 2007 +0000
+++ b/udp.c	Wed Oct 31 07:02:30 2007 +0000
@@ -111,7 +111,7 @@
     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 @@
     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 @@
         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 @@
     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 @@
             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) {