#include <stdio.h>
#include "my_sockets.h"
#include "signals.h"
void http_sigalrm_handler (int signo) { }
int main (int argc, char *argv[])
{
int sock, cr;
struct sockaddr_in my_ip_address;
unsigned long int ellapsed, size;
char *response, buf[10000];
if (argc != 6)
{
fprintf (stderr, "\nUsage sockets.test <host name> <TCP port> <timeout (sec)> <timeout (micro)> <path to web document>\n");
return 1;
}
set_signal (SIGALRM);
if (set_signal_handler(http_sigalrm_handler) == 1)
{
fprintf (stderr, "\nError: can not set signal handler!\n");
return 1;
}
sock = open_tcp_connexion (&my_ip_address, argv[1], atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), &ellapsed);
switch (sock)
{
case SCK_CREATE_ERROR:
{
fprintf (stderr, "\nError: can not create the socket!\n");
return 1;
}; break;
case SCK_CONNECT_ERROR:
{
fprintf (stderr, "\nError: can not connect to the remote server!\n");
return 1;
}; break;
case SCK_GET_IP_ERROR:
{
fprintf (stderr, "\nError: DNS lookup failed!\n");
return 1;
}; break;
case SCK_TIMEOUT_CONNECT:
{
fprintf (stderr, "\nError: Timeout!\n");
return 1;
}; break;
case SCK_TIMER_ERROR:
{
fprintf (stderr, "\nError: high precision timer error!\n");
return 1;
}; break;
case SCK_CHRONO_ERROR:
{
fprintf (stderr, "\nError: high precision chrono error!\n");
return 1;
}; break;
default:
fprintf (stdout, "\nConnection OK - ellapsed time for connect() : %lu ms\n", ellapsed);
}
buf[0] = 0;
strcat (buf, "GET ");
strcat (buf, argv[5]);
strcat (buf, " HTTP/1.0");
strcat (buf, "\nUser-Agent: ApacheBench");
strcat (buf, "\nHost: ");
strcat (buf, "bench");
strcat (buf, "\nAccept: */*");
strcat (buf, "\012\015\012\015");
fprintf (stdout, "\nSending\n\n%s\n\n", buf); fflush (stdout);
cr = write (sock, (void*)buf, strlen(buf));
if (cr == -1)
{
fprintf (stderr, "\nError: System call write() failed!\n");
return 1;
}
cr = read_all_socket (sock, &response, atoi(argv[3]), atoi(argv[4]), &ellapsed, &size);
switch (cr)
{
case SCK_READ_NO_MEM:
{
fprintf (stderr, "\nError: Program running out of memory!\n");
return 1;
}; break;
case SCK_READ_READ_ERROR:
{
fprintf (stderr, "\nError: System call read() failed!\n");
return 1;
}; break;
case SCK_READ_TIMEOUT:
{
fprintf (stderr, "\nError: Read timeout!\n");
return 1;
}; break;
case SCK_READ_CHRONO_ERROR:
{
fprintf (stderr, "\nError: high precision chrono error!\n");
return 1;
}; break;
default: {
fprintf (stdout, "\nGet response - OK: response is [%s] (%lu bytes) - ellapsed time: %lu ms\n", response, size, ellapsed);
free (response);
}
}
close (sock);
return 0;
}