When using silc_net_create_connection[_async], and your system can
authorPatrik Weiskircher <pat@silcnet.org>
Wed, 22 Sep 2004 17:50:49 +0000 (17:50 +0000)
committerPatrik Weiskircher <pat@silcnet.org>
Wed, 22 Sep 2004 17:50:49 +0000 (17:50 +0000)
  create IPv6 sockets, it will try to connect to the IPv6 host. Now it
  tries to connect to an IPv4 host if IPv6 fails.

CHANGES
lib/silcutil/unix/silcunixnet.c

diff --git a/CHANGES b/CHANGES
index 045ff6089ac31c0d3f432857106c8ab0229edaf5..36e1d6d46248f91f1557c60f827d24495d1a836e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,10 @@
+Wed Sep 22 19:46:32 CEST 2004  Patrik Weiskircher <pat@icore.at>
+
+  * When using silc_net_create_connection[_async], and your system can
+    create IPv6 sockets, it will try to connect to the IPv6 host. Now it
+    tries to connect to an IPv4 host if IPv6 fails. Affected file
+    lib/silcutil/unix/silcunixnet.c
+
 Fri Jun 18 19:26:58 CEST 2004  Pekka Riikonen <priikone@silcnet.org>
 
        * Check for valid route when receiving packet from router and
index b753ac5118be0430f4e795e63adb38611527835b..d2e52e936a1d75ff444926ab27e8d6e75bbc949d 100644 (file)
@@ -197,6 +197,14 @@ int silc_net_create_connection(const char *local_ip, int port,
   /* Connect to the host */
   rval = connect(sock, &desthost.sa, SIZEOF_SOCKADDR(desthost));
   if (rval < 0) {
+    /* retry using an IPv4 adress, if IPv6 didn't work */
+    if (prefer_ipv6 && silc_net_is_ip6(ip_addr)) {
+      shutdown(sock, 2);
+      close(sock);
+
+      prefer_ipv6 = FALSE;
+      goto retry;
+    }
     SILC_LOG_ERROR(("Cannot connect to remote host: %s", strerror(errno)));
     shutdown(sock, 2);
     close(sock);
@@ -272,6 +280,15 @@ int silc_net_create_connection_async(const char *local_ip, int port,
   rval = connect(sock, &desthost.sa, SIZEOF_SOCKADDR(desthost));
   if (rval < 0) {
     if (errno !=  EINPROGRESS) {
+      /* retry using an IPv4 adress, if IPv6 didn't work */
+      if (prefer_ipv6 && silc_net_is_ip6(ip_addr)) {
+        shutdown(sock, 2);
+        close(sock);
+
+        prefer_ipv6 = FALSE;
+        goto retry;
+      }
+
       SILC_LOG_ERROR(("Cannot connect to remote host: %s", strerror(errno)));
       shutdown(sock, 2);
       close(sock);