check for the return values
committer: Markus Bröker <mbroeker@largo.homelinux.org>
/**
* connection.c
* Copyright (C) 2008 mussolini
* Copyright (C) 2008 mbroeker
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
int connection (char *ip, unsigned short port)
{
struct hostent *hs;
struct sockaddr_in sock;
int sockfd;
memset (&sock, 0, sizeof (sock));
sock.sin_family = PF_INET;
sock.sin_port = htons (port);
if ((sock.sin_addr.s_addr = inet_addr (ip)) == -1) {
if ((hs = gethostbyname (ip)) == NULL) {
perror ("[-] Error");
return -1;
}
sock.sin_family = hs->h_addrtype;
memcpy (&sock.sin_addr.s_addr, hs->h_addr_list[0], hs->h_length);
}
if ((sockfd = socket (PF_INET, SOCK_STREAM, 0)) < 0) {
perror ("[-] Error");
return -1;
}
if (connect (sockfd, (struct sockaddr *)&sock, sizeof (sock)) < 0) {
perror ("[-] Error ");
return -1;
}
return (sockfd);
}
int main (int argc, char **argv)
{
char buffer[1024];
int sockfd;
int num;
if (argc != 3) {
printf ("Usage: %s <ipaddr> <port>\n", argv[0]);
return EXIT_FAILURE;
}
if ((sockfd = connection (argv[1], atoi (argv[2]))) < 0) {
printf ("Connection error: %s:%d\n", argv[1], atoi (argv[2]));
return EXIT_FAILURE;
}
if (write (sockfd, "GET /\r\n", 7) == -1) {
perror ("write");
return EXIT_FAILURE;
}
while ((num = read (sockfd, buffer, 1023)) != 0) {
buffer[num] = 0;
printf ("%s", buffer);
}
return close (sockfd);
}