summaryrefslogtreecommitdiff
path: root/libavformat/udp.c
diff options
context:
space:
mode:
authorNicolas George <nicola.george@normalesup.org>2007-10-31 07:02:30 +0000
committerLuca Abeni <lucabe72@email.it>2007-10-31 07:02:30 +0000
commitd607861cd5cb78128e48b018d7f4e948ddb82534 (patch)
tree08c00a9096ab73cd0692778247e9e74e94f954f4 /libavformat/udp.c
parentfac84d3c18a7d4591a890ef5e63efc8067cc2576 (diff)
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) Originally committed as revision 10881 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/udp.c')
-rw-r--r--libavformat/udp.c12
1 files changed, 1 insertions, 11 deletions
diff --git a/libavformat/udp.c b/libavformat/udp.c
index d0aadcefc8..2edd926792 100644
--- a/libavformat/udp.c
+++ b/libavformat/udp.c
@@ -111,7 +111,7 @@ static struct addrinfo* udp_ipv6_resolve_host(const char *hostname, int port, in
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_host(const char *hostname, int port, in
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_host(const char *hostname, int port, in
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 *h) {
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 *h) {
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) {