From c19330d1e61698f1758d5bf9d340955e1d4d876b Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 7 Dec 2004 23:23:20 +0000 Subject: [PATCH] Versione di debug funzionante, la salvo prima di rimuovere tutto per mettere le funzioni dentro SockUtil.c --- sources/sockconn.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/sources/sockconn.c b/sources/sockconn.c index 952910a..543abe6 100644 --- a/sources/sockconn.c +++ b/sources/sockconn.c @@ -28,18 +28,24 @@ * ****************************************************************/ #include +#include #include #include #include #include #include #include +#include int sockconn(char *host, char *serv, int prot, int type) { struct addrinfo hint, *addr, *save; int res; int sock; + int err; + char buffer[INET6_ADDRSTRLEN]; + struct sockaddr_in *ip4; + struct sockaddr_in6 *ip6; /* initialize hint structure */ memset(&hint, 0, sizeof(struct addrinfo)); hint.ai_family = PF_UNSPEC; /* generic address (IPv4 or IPv6) */ @@ -55,10 +61,20 @@ int sockconn(char *host, char *serv, int prot, int type) /* loop on possible addresses */ save = addr; while (addr != NULL) { + if (addr->ai_family == PF_INET) { + ip4 = (struct sockaddr_in *) addr->ai_addr; + printf("Indirizzo %s\n", inet_ntop(ip4->sin_family, &ip4->sin_addr, + buffer, sizeof(buffer))); + } else { + ip6 = (struct sockaddr_in6 *) addr->ai_addr; + printf("Indirizzo %s\n", inet_ntop(ip6->sin6_family, + &ip6->sin6_addr, + buffer, sizeof(buffer))); + } /* get a socket */ sock = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol); if (sock < 0) { - if (addr->ai_next == NULL) { + if (addr->ai_next != NULL) { addr=addr->ai_next; continue; } else { @@ -69,15 +85,18 @@ int sockconn(char *host, char *serv, int prot, int type) /* connect the socket */ res = connect(sock, addr->ai_addr, addr->ai_addrlen); if (res < 0) { - if (addr->ai_next == NULL) { + if (addr->ai_next != NULL) { close(sock); addr=addr->ai_next; continue; } else { + err = errno; + close(sock); + errno = err; printf("sockconn cannot connect socket\n"); return res; } - } + } else break; } freeaddrinfo(save); /* done, release memory */ return sock; -- 2.30.2