X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Fchunker.c;h=6f81ad2b1cd9ef12cfdcf24ee2d156a3fde131cb;hb=HEAD;hp=0c4c2b0a0c1f79c293d7f7dc72d277ebdef76aba;hpb=011a59f5a54864108a16af570a6b287410597cc2;p=debian%2Famanda diff --git a/server-src/chunker.c b/server-src/chunker.c index 0c4c2b0..6f81ad2 100644 --- a/server-src/chunker.c +++ b/server-src/chunker.c @@ -1,6 +1,7 @@ /* * Amanda, The Advanced Maryland Automatic Network Disk Archiver * Copyright (c) 1991-1999 University of Maryland at College Park + * Copyright (c) 2007-2012 Zmanda, Inc. All Rights Reserved. * All Rights Reserved. * * Permission to use, copy, modify, distribute, and sell this software and its @@ -43,6 +44,7 @@ #include "util.h" #include "holding.h" #include "timestamp.h" +#include "sockaddr-util.h" #ifndef SEEK_SET #define SEEK_SET 0 @@ -440,6 +442,9 @@ startup_chunker( int header_socket, data_socket; int result; struct addrinfo *res; + struct addrinfo *res_addr; + sockaddr_union *addr = NULL; + sockaddr_union data_addr; header_port = 0; data_port = 0; @@ -448,10 +453,26 @@ startup_chunker( gai_strerror(result)); return -1; } - header_socket = stream_server(res->ai_family, &header_port, 0, + for (res_addr = res; res_addr != NULL; res_addr = res_addr->ai_next) { + g_debug("ra: %s\n", str_sockaddr((sockaddr_union*)res_addr->ai_addr)); + if (res_addr->ai_family == AF_INET) { + addr = (sockaddr_union *)res_addr->ai_addr; + break; + } + } + if (!addr) { + addr = (sockaddr_union *)res->ai_addr; + g_debug("addr: %s\n", str_sockaddr(addr)); + } + + header_socket = stream_server(SU_GET_FAMILY(addr), &header_port, 0, STREAM_BUFSIZE, 0); - data_socket = stream_server(res->ai_family, &data_port, 0, + data_socket = stream_server(SU_GET_FAMILY(addr), &data_port, 0, STREAM_BUFSIZE, 0); + copy_sockaddr(&data_addr, addr); + + SU_SET_PORT(&data_addr, data_port); + if (res) freeaddrinfo(res); if (header_socket < 0) { @@ -466,7 +487,7 @@ startup_chunker( return -1; } - putresult(PORT, "%d 127.0.0.1:%d\n", header_port, data_port); + putresult(PORT, "%d %s\n", header_port, str_sockaddr(&data_addr)); header_fd = stream_accept(header_socket, CONNECT_TIMEOUT, 0, STREAM_BUFSIZE);