diff --git a/common.c b/common.c index a662940..d25bab3 100644 --- a/common.c +++ b/common.c @@ -121,15 +121,6 @@ int start_listen_sockets(int *sockfd[], struct addrinfo *addr_list) (*sockfd)[i] = socket(saddr->ss_family, SOCK_STREAM, 0); check_res_dumpdie((*sockfd)[i], addr, "socket"); - /* If transparent proxy enabled and ipv6 address then only listen on IPv6 port. - * Transparent proxying fails if you don't. - * */ - if (transparent && saddr->ss_family == AF_INET6) - { - res = setsockopt((*sockfd)[i], IPPROTO_IPV6, IPV6_V6ONLY, (char*)&one, sizeof(one)); - check_res_dumpdie(res, addr, "setsockopt(IPV6_V6ONLY)"); - } - one = 1; res = setsockopt((*sockfd)[i], SOL_SOCKET, SO_REUSEADDR, (char*)&one, sizeof(one)); check_res_dumpdie(res, addr, "setsockopt(SO_REUSEADDR)"); @@ -145,11 +136,22 @@ int start_listen_sockets(int *sockfd[], struct addrinfo *addr_list) check_res_dumpdie(res, addr, "setsockopt(IP_FREEBIND)"); } + /* If transparent proxy enabled and ipv6 address then only listen on IPv6 port. + * Transparent proxying fails if you don't. + * */ + if (transparent && saddr->ss_family == AF_INET6) + { +//fprintf(stderr, "Transparent set and IPv6\n"); + res = setsockopt((*sockfd)[i], IPPROTO_IPV6, IPV6_V6ONLY, (char*)&one, sizeof(one)); + check_res_dumpdie(res, addr, "setsockopt(IPV6_V6ONLY)"); + } + res = bind((*sockfd)[i], addr->ai_addr, addr->ai_addrlen); check_res_dumpdie(res, addr, "bind"); res = listen ((*sockfd)[i], 50); check_res_dumpdie(res, addr, "listen"); +//fprintf(stderr, "here\n"); } @@ -165,7 +167,7 @@ int bind_peer(int fd, int fd_from) struct sockaddr_storage ss; int res, trans = 1; - fprintf(stderr, "Starting bind_peer\n"); + //fprintf(stderr, "Starting bind_peer\n"); memset(&from, 0, sizeof(from)); from.ai_addr = (struct sockaddr*)&ss; @@ -209,7 +211,7 @@ int bind_peer(int fd, int fd_from) } #ifndef IP_BINDANY /* use IP_TRANSPARENT */ - fprintf(stderr, "IP_TRANSPARENT\n"); +//fprintf(stderr, "IP_TRANSPARENT\n"); res = setsockopt(fd, IPPROTO_IP, IP_TRANSPARENT, &trans, sizeof(trans)); CHECK_RES_DIE(res, "setsockopt"); #else @@ -223,7 +225,7 @@ int bind_peer(int fd, int fd_from) #endif /* IPV6_BINDANY */ } #endif /* IP_TRANSPARENT / IP_BINDANY */ - fprintf(stderr, "bind\n"); +// fprintf(stderr, "bind\n"); res = bind(fd, from.ai_addr, from.ai_addrlen); CHECK_RES_RETURN(res, "bind");