Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Examples  

test_sockets.c

This file shows hos to use the function open_tcp_connexion().

#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];
  

  /* ================================================ */
  /* Check the command line arguments                 */
  /* ================================================ */

  if (argc != 6)
  {
    fprintf (stderr, "\nUsage sockets.test <host name> <TCP port> <timeout (sec)> <timeout (micro)> <path to web document>\n");
    return 1;
  }

  /* ================================================ */
  /* Set dummy signal handler for SIGARLM             */
  /* ================================================ */

  set_signal (SIGALRM);
  if (set_signal_handler(http_sigalrm_handler) == 1)
  {
    fprintf (stderr, "\nError: can not set signal handler!\n");
    return 1;
  }

  /* ================================================ */
  /* Open connection to the remote server             */
  /* ================================================ */

  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);
   
  }

  /* ================================================ */
  /* Send something                                   */
  /* ================================================ */

  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;
  }

  /* ================================================ */
  /* Read server's response                           */
  /* ================================================ */

  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);
             }

  }

  /* ================================================ */
  /* Disconnect and exit                              */
  /* ================================================ */

  close (sock);
  return 0;
}

Generated on Thu Apr 3 16:23:41 2003 for Common_C_libraries by doxygen1.3-rc1