X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sources%2Fsockconn.c;fp=sources%2Fsockconn.c;h=0000000000000000000000000000000000000000;hp=543abe679109579160be079a889832e6af377e82;hb=5a12d423b85ac5decb966bc3c3a797b3ad9a7a3f;hpb=c19330d1e61698f1758d5bf9d340955e1d4d876b diff --git a/sources/sockconn.c b/sources/sockconn.c deleted file mode 100644 index 543abe6..0000000 --- a/sources/sockconn.c +++ /dev/null @@ -1,103 +0,0 @@ -/* sockconn.c - * - * Copyright (C) 2004 Simone Piccardi - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -/**************************************************************** - * - * Routine sockconn - * Return a connected socket given hostname, service, and socket type - * - * Author: Simone Piccardi - * Dec. 2004 - * - * $Id$ - * - ****************************************************************/ -#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) */ - hint.ai_protocol = prot; /* protocol */ - hint.ai_socktype = type; /* socket type */ - res = getaddrinfo(host, serv, &hint, &addr); /* calling getaddrinfo */ - if (res != 0) { /* on error exit */ - printf("sockconn cannot resolve host %s, service %s, ", host, serv); - printf("protocol %d: %s\n", prot, gai_strerror(res)); - errno = 0; /* clear errno */ - return -1; - } - /* 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) { - addr=addr->ai_next; - continue; - } else { - printf("sockconn cannot create socket\n"); - return sock; - } - } - /* connect the socket */ - res = connect(sock, addr->ai_addr, addr->ai_addrlen); - if (res < 0) { - 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; -}