connecttcp.c revision 256281
118334Speter/* 218334Speter * Copyright (C) 2012 by Darren Reed. 390075Sobrien * 4169689Skan * See the IPFILTER.LICENCE file for details on licencing. 550397Sobrien * 618334Speter * $Id: connecttcp.c,v 1.3.2.2 2012/07/22 08:04:24 darren_r Exp $ 790075Sobrien */ 818334Speter 990075Sobrien#include "ipf.h" 1090075Sobrien#include <ctype.h> 1190075Sobrien 1290075Sobrien/* 1318334Speter * Format expected is one addres per line, at the start of each line. 1490075Sobrien */ 1590075Sobrienint 1690075Sobrienconnecttcp(char *server, int port) 1790075Sobrien{ 1890075Sobrien struct sockaddr_in sin; 1990075Sobrien struct hostent *host; 2090075Sobrien int fd; 2190075Sobrien 2218334Speter memset(&sin, 0, sizeof(sin)); 2390075Sobrien sin.sin_family = AF_INET; 2490075Sobrien sin.sin_port = htons(port & 65535); 2590075Sobrien 2690075Sobrien if (ISDIGIT(*server)) { 2790075Sobrien if (inet_aton(server, &sin.sin_addr) == -1) { 2818334Speter return -1; 2990075Sobrien } 30169689Skan } else { 31169689Skan host = gethostbyname(server); 3218334Speter if (host == NULL) 3390075Sobrien return -1; 3418334Speter memcpy(&sin.sin_addr, host->h_addr_list[0], 3518334Speter sizeof(sin.sin_addr)); 3618334Speter } 3718334Speter 3818334Speter fd = socket(AF_INET, SOCK_STREAM, 0); 3918334Speter if (fd == -1) 4018334Speter return -1; 4118334Speter 4218334Speter if (connect(fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) { 4318334Speter close(fd); 4418334Speter return -1; 4518334Speter } 4618334Speter 4718334Speter return fd; 4818334Speter} 4918334Speter