From 3c7eeb2af5e97c074ea1ba29f1ebe7a2d710ea48 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 3 Mar 2000 22:35:33 +1100 Subject: - Don't permanently fail on bind() if getaddrinfo has more choices left for us. Needed to work around messy IPv6 on Linux. Patch from Arkadiusz Miskiewicz --- channels.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'channels.c') diff --git a/channels.c b/channels.c index ba4c2bef9..7d5e9a1af 100644 --- a/channels.c +++ b/channels.c @@ -16,7 +16,7 @@ */ #include "includes.h" -RCSID("$Id: channels.c,v 1.16 2000/01/17 02:22:55 damien Exp $"); +RCSID("$Id: channels.c,v 1.17 2000/03/03 11:35:33 damien Exp $"); #include "ssh.h" #include "packet.h" @@ -935,7 +935,11 @@ channel_request_local_forwarding(u_short port, const char *host, /* Bind the socket to the address. */ if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) { /* address can be in use ipv6 address is already bound */ - verbose("bind: %.100s", strerror(errno)); + if (!ai->ai_next) + error("bind: %.100s", strerror(errno)); + else + verbose("bind: %.100s", strerror(errno)); + close(sock); continue; } @@ -1199,6 +1203,10 @@ x11_create_display_inet(int screen_number, int x11_display_offset) debug("bind port %d: %.100s", port, strerror(errno)); shutdown(sock, SHUT_RDWR); close(sock); + + if (ai->ai_next) + continue; + for (n = 0; n < num_socks; n++) { shutdown(socks[n], SHUT_RDWR); close(socks[n]); -- cgit v1.2.3