gtpc1m6yTransmission Control Protocol/Internet Protocol

activate_on_receipt Transmission Control Protocol (TCP) Server

/**********************************************************/
/* This is a stream socket server sample program that     */
/* accepts a connect request from a client program        */
/* and issues an activate_on_receipt socket API call to   */
/* create a child program.  When the message from the     */
/* client program is received, the child program is       */
/* activated with a new ECB.                              */
/**********************************************************/
 
/**********************************************************/
/* TPF Standard Header Files                              */
/**********************************************************/
#include <tpfeq.h>
#include <tpfio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#include <types.h>
#include <socket.h>             /* Socket API Header File */
 
#define return_error        -1
 
qxye()
{
  struct sockaddr_in server_sockaddr_in, name_sockaddr_in;
 
  char server_name[50];
 
  int client_sock;
  int rc;
  int server_sock;
  int sockaddr_in_length;
  int num_of_clients;
  unsigned char aorparm[8];
  unsigned char aorpgm[4]= {'Q','X','Y','K'};
 
  sockaddr_in_length = sizeof(struct sockaddr_in);
 
  /**************************/
  /* Create a stream socket */
  /**************************/
  server_sock = socket(AF_INET,SOCK_STREAM,0);
  if (server_sock == return_error)
  {
    printf("Error in opening stream socket\n");
    exit(0);
  }
 
  /***********/
  /* Bind it */
  /***********/
  server_sockaddr_in.sin_family      = AF_INET;
  server_sockaddr_in.sin_addr.s_addr = INADDR_ANY;
  server_sockaddr_in.sin_port        = 5003;
  rc = bind(server_sock,(struct sockaddr *)&server_sockaddr_in,
                         sockaddr_in_length);
  if (rc == return_error)
  {
    printf("Error in binding stream - %d\n",sock_errno());
    close(server_sock);
    exit(0);
  }
 
  /********************************/
  /* Listen to any socket clients.*/
  /********************************/
  rc = listen(server_sock,5);
  if (rc == return_error)
  {
    printf("Error in listening client socket - %d\n",sock_errno());
    close(server_sock);
    exit(0);
  }
 
  /**********************************************/
  /* Call gethostname to obtain the server name.*/
  /**********************************************/
  rc = gethostname(server_name,sizeof(server_name));
  if (rc == return_error)
  {
    printf("Error in getting host name - %d\n",sock_errno());
  }
 
  /********************************/
  /* Print out server information.*/
  /********************************/
  printf("\nServer Information\n");
  printf("-----------------------------------\n");
  printf("Socket        = %d\n",server_sock);
  printf("Host ID       = %x\n",gethostid());
  printf("Host Name     = %s\n",server_name);
  printf("Host Family   = %x\n",name_sockaddr_in.sin_family);
  printf("Host Address  = %x\n",name_sockaddr_in.sin_addr.s_addr);
  printf("Host Port No  = %d\n",name_sockaddr_in.sin_port);
  printf("-----------------------------------\n\n");
 
  num_of_clients = 0;
 
  /******************************************************************/
  /* Accept a socket client.                                        */
  /******************************************************************/
  client_sock = accept(server_sock,(struct sockaddr *)&name_sockaddr_in,
                       &sockaddr_in_length);
  if (client_sock == return_error)
  {
    printf("Cannot accept any new clients - %d\n",sock_errno());
    close(server_sock);
    exit(0);
  }
  else
  {
    (void)memcpy(aorparm,&server_sock,sizeof(server_sock));
    (void)memcpy(aorparm+sizeof(server_sock),&client_sock,
                         sizeof(client_sock));
    rc = activate_on_receipt(client_sock,aorparm,aorpgm);
    if (rc == -1)
    {
      printf("error in activate_on_receipt - %d\n",sock_errno());
      close(server_sock);
      exit(0);
    }
    else
    {
    num_of_clients = num_of_clients + 1;
    }
  }
 
  rc = close(server_sock);
  if (num_of_clients == 1)
     printf("%d Client was activated\n\n", num_of_clients);
  else
     printf("%d Clients were activated\n\n", num_of_clients);
  printf("Terminated communication normally\n");
 
  exit(0);
}