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