aboutsummaryrefslogtreecommitdiff
path: root/src/util/connection.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-01-21 15:50:39 +0000
committerChristian Grothoff <christian@grothoff.org>2013-01-21 15:50:39 +0000
commit90336d964868e9d726b87ab2f60470e6b4063b20 (patch)
treed0ac394431fa96a8f6d21d8a3e9c70f18a0b07c8 /src/util/connection.c
parentcfa84463ead2e088299fa3e036c4d8608efa71e6 (diff)
downloadgnunet-90336d964868e9d726b87ab2f60470e6b4063b20.tar.gz
gnunet-90336d964868e9d726b87ab2f60470e6b4063b20.zip
-undo 25844
Diffstat (limited to 'src/util/connection.c')
-rw-r--r--src/util/connection.c57
1 files changed, 8 insertions, 49 deletions
diff --git a/src/util/connection.c b/src/util/connection.c
index cb887c412..d7ae12fb3 100644
--- a/src/util/connection.c
+++ b/src/util/connection.c
@@ -733,68 +733,27 @@ try_connect_using_address (void *cls, const struct sockaddr *addr,
733 ap->addrlen = addrlen; 733 ap->addrlen = addrlen;
734 ap->connection = connection; 734 ap->connection = connection;
735 735
736 ap->sock = GNUNET_NETWORK_socket_create (ap->addr->sa_family, SOCK_STREAM, 0);
737 if (NULL == ap->sock)
738 {
739 GNUNET_free (ap);
740 return; /* not supported by OS */
741 }
742 switch (ap->addr->sa_family) 736 switch (ap->addr->sa_family)
743 { 737 {
744 case AF_INET: 738 case AF_INET:
745 { 739 ((struct sockaddr_in *) ap->addr)->sin_port = htons (connection->port);
746 struct sockaddr_in bnd;
747
748 ((struct sockaddr_in *) ap->addr)->sin_port = htons (connection->port);
749
750 bnd.sin_family = AF_INET;
751 bnd.sin_port = htons (0);
752 bnd.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
753#if HAVE_SOCKADDR_IN_SIN_LEN
754 bnd.sin_len = sizeof (bnd);
755#endif
756 if (0 == memcmp (&bnd.sin_addr.s_addr,
757 &((struct sockaddr_in *) ap->addr)->sin_addr.s_addr,
758 sizeof (bnd.sin_addr.s_addr)))
759 {
760 /* bind source IP to FORCE it to be loopback */
761 (void) GNUNET_NETWORK_socket_bind (ap->sock,
762 (const struct sockaddr *) &bnd,
763 sizeof (bnd));
764 }
765 }
766 break; 740 break;
767 case AF_INET6: 741 case AF_INET6:
768 { 742 ((struct sockaddr_in6 *) ap->addr)->sin6_port = htons (connection->port);
769 struct sockaddr_in6 bnd;
770
771 ((struct sockaddr_in6 *) ap->addr)->sin6_port = htons (connection->port);
772
773 bnd.sin6_family = AF_INET6;
774 bnd.sin6_port = htons (0);
775 bnd.sin6_addr = in6addr_loopback;
776#if HAVE_SOCKADDR_IN_SIN_LEN
777 bnd.sin6_len = sizeof (bnd);
778#endif
779 if (0 == memcmp (&bnd.sin6_addr,
780 &((struct sockaddr_in6 *) ap->addr)->sin6_addr,
781 sizeof (bnd.sin6_addr)))
782 {
783 /* bind source IP to FORCE it to be loopback */
784 (void) GNUNET_NETWORK_socket_bind (ap->sock,
785 (const struct sockaddr *) &bnd,
786 sizeof (bnd));
787 }
788 }
789 break; 743 break;
790 default: 744 default:
791 GNUNET_break (0); 745 GNUNET_break (0);
792 GNUNET_free (ap); 746 GNUNET_free (ap);
793 return; /* not supported by us */ 747 return; /* not supported by us */
794 } 748 }
749 ap->sock = GNUNET_NETWORK_socket_create (ap->addr->sa_family, SOCK_STREAM, 0);
750 if (NULL == ap->sock)
751 {
752 GNUNET_free (ap);
753 return; /* not supported by OS */
754 }
795 LOG (GNUNET_ERROR_TYPE_INFO, _("Trying to connect to `%s' (%p)\n"), 755 LOG (GNUNET_ERROR_TYPE_INFO, _("Trying to connect to `%s' (%p)\n"),
796 GNUNET_a2s (ap->addr, ap->addrlen), connection); 756 GNUNET_a2s (ap->addr, ap->addrlen), connection);
797
798 if ((GNUNET_OK != 757 if ((GNUNET_OK !=
799 GNUNET_NETWORK_socket_connect (ap->sock, ap->addr, ap->addrlen)) && 758 GNUNET_NETWORK_socket_connect (ap->sock, ap->addr, ap->addrlen)) &&
800 (EINPROGRESS != errno)) 759 (EINPROGRESS != errno))