[Top][All Lists]
[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r6912 - GNUnet/src/util/network_client,
gnunet <=