- 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 <misiek@pld.org.pl>
diff --git a/channels.c b/channels.c
index ba4c2be..7d5e9a1 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 @@
 		/* 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 @@
 				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]);