gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r6912 - GNUnet/src/util/network_client


From: gnunet
Subject: [GNUnet-SVN] r6912 - GNUnet/src/util/network_client
Date: Tue, 27 May 2008 02:02:05 -0600 (MDT)

Author: holindho
Date: 2008-05-27 02:02:05 -0600 (Tue, 27 May 2008)
New Revision: 6912

Modified:
   GNUnet/src/util/network_client/tcpio.c
Log:
really, really ensure that a socket is connected


Modified: GNUnet/src/util/network_client/tcpio.c
===================================================================
--- GNUnet/src/util/network_client/tcpio.c      2008-05-27 07:09:45 UTC (rev 
6911)
+++ GNUnet/src/util/network_client/tcpio.c      2008-05-27 08:02:05 UTC (rev 
6912)
@@ -314,13 +314,13 @@
       sock->sock = GNUNET_socket_create (sock->ectx, NULL, osock);
       GNUNET_socket_set_blocking (sock->sock, GNUNET_NO);
       ret = CONNECT (osock, soaddr, socklen);
-      GNUNET_free (soaddr);
       if ((ret != 0) && (errno != EINPROGRESS) && (errno != EWOULDBLOCK))
         {
           GNUNET_GE_LOG (sock->ectx,
                          GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_BULK,
                          _("Cannot connect to %s:%u: %s\n"),
                          host, port, STRERROR (errno));
+          GNUNET_free (soaddr);
           GNUNET_socket_destroy (sock->sock);
           sock->sock = NULL;
           GNUNET_mutex_unlock (sock->destroylock);
@@ -346,6 +346,7 @@
             GNUNET_GE_LOG_STRERROR (sock->ectx,
                                     GNUNET_GE_WARNING | GNUNET_GE_USER |
                                     GNUNET_GE_BULK, "select");
+          GNUNET_free (soaddr);
           GNUNET_socket_destroy (sock->sock);
           sock->sock = NULL;
           GNUNET_mutex_unlock (sock->destroylock);
@@ -356,6 +357,7 @@
           GNUNET_GE_LOG (sock->ectx,
                          GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_BULK,
                          _("Error connecting to %s:%u\n"), host, port);
+          GNUNET_free (soaddr);
           GNUNET_socket_destroy (sock->sock);
           sock->sock = NULL;
           GNUNET_mutex_unlock (sock->destroylock);
@@ -367,11 +369,49 @@
                          GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_BULK,
                          _("Failed to connect to %s:%u in %ds\n"),
                          host, port, WAIT_SECONDS);
+          GNUNET_free (soaddr);
           GNUNET_socket_destroy (sock->sock);
           sock->sock = NULL;
           GNUNET_mutex_unlock (sock->destroylock);
           continue;
         }
+      else
+        {
+          struct sockaddr *sa;
+          socklen_t slen;
+          if (soaddr->sa_family == AF_INET)
+            {
+              sa = GNUNET_malloc (sizeof (struct sockaddr_in));
+              memset (sa, 0, sizeof (struct sockaddr_in));
+              slen = sizeof (struct sockaddr_in);
+            }
+          else
+            {
+              sa = GNUNET_malloc (sizeof (struct sockaddr_in6));
+              memset (sa, 0, sizeof (struct sockaddr_in6));
+              slen = sizeof (struct sockaddr_in6);
+            }
+          GNUNET_free (soaddr);
+          if (GETPEERNAME(osock, sa, &slen) != 0)
+            {
+              GNUNET_GE_LOG (sock->ectx,
+                             GNUNET_GE_WARNING | GNUNET_GE_USER |
+                             GNUNET_GE_BULK,
+                             _("Failed to connect to %s:%u in %ds\n"),
+                             host, port, WAIT_SECONDS);
+              if (errno != ENOTCONN)
+                GNUNET_GE_LOG_STRERROR (sock->ectx,
+                                        GNUNET_GE_WARNING | GNUNET_GE_USER |
+                                        GNUNET_GE_BULK, "getpeername");
+
+              GNUNET_free (sa);
+              GNUNET_socket_destroy (sock->sock);
+              sock->sock = NULL;
+              GNUNET_mutex_unlock (sock->destroylock);
+              continue;              
+            }
+          GNUNET_free (sa);
+        }
       break;
     }
   GNUNET_free (host);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]