1 1.2 darrenr /* $NetBSD: connecttcp.c,v 1.2 2012/07/22 14:27:36 darrenr Exp $ */ 2 1.1 christos 3 1.1 christos /* 4 1.2 darrenr * Copyright (C) 2012 by Darren Reed. 5 1.1 christos * 6 1.1 christos * See the IPFILTER.LICENCE file for details on licencing. 7 1.1 christos * 8 1.2 darrenr * Id: connecttcp.c,v 1.1.1.2 2012/07/22 13:44:38 darrenr Exp $ 9 1.1 christos */ 10 1.1 christos 11 1.1 christos #include "ipf.h" 12 1.1 christos #include <ctype.h> 13 1.1 christos 14 1.1 christos /* 15 1.1 christos * Format expected is one addres per line, at the start of each line. 16 1.1 christos */ 17 1.1 christos int 18 1.1 christos connecttcp(char *server, int port) 19 1.1 christos { 20 1.1 christos struct sockaddr_in sin; 21 1.1 christos struct hostent *host; 22 1.1 christos int fd; 23 1.1 christos 24 1.1 christos memset(&sin, 0, sizeof(sin)); 25 1.1 christos sin.sin_family = AF_INET; 26 1.1 christos sin.sin_port = htons(port & 65535); 27 1.1 christos 28 1.1 christos if (ISDIGIT(*server)) { 29 1.1 christos if (inet_aton(server, &sin.sin_addr) == -1) { 30 1.1 christos return -1; 31 1.1 christos } 32 1.1 christos } else { 33 1.1 christos host = gethostbyname(server); 34 1.1 christos if (host == NULL) 35 1.1 christos return -1; 36 1.1 christos memcpy(&sin.sin_addr, host->h_addr_list[0], 37 1.1 christos sizeof(sin.sin_addr)); 38 1.1 christos } 39 1.1 christos 40 1.1 christos fd = socket(AF_INET, SOCK_STREAM, 0); 41 1.1 christos if (fd == -1) 42 1.1 christos return -1; 43 1.1 christos 44 1.1 christos if (connect(fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) { 45 1.1 christos close(fd); 46 1.1 christos return -1; 47 1.1 christos } 48 1.1 christos 49 1.1 christos return fd; 50 1.1 christos } 51