gtpc1m6zTransmission Control Protocol/Internet Protocol

activate_on_receipt Transmission Control Protocol (TCP) Child Server

/******************************************************************/
/* This is a stream child server sample program which is activated*/
/* when a message is received from the client program.            */
/******************************************************************/
 
/**********************************************************/
/* TPF Standard Header Files                              */
/**********************************************************/
 
#include <tpfeq.h>
#include <tpfio.h>
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#include <socket.h>           /* Socket API Header File */
#include <types.h>
 
#define PRIMECRAS            0x010000
 
#define return_error        -1
 
#define MAX_BUFFER_LEN       32 * 1024
 
 
qxyk()
{
  struct sockaddr_in name_sockaddr_in;
 
  char *read_addr;
 
  int client_sock;
  int optlen;
  int optval;
  int rc;
  int read_len;
  int sockaddr_in_length;
  int echo_len;
 
  sockaddr_in_length = sizeof(struct sockaddr_in);
 
  (void)memcpy(&read_addr,&(ecbptr()->ebw012),
               sizeof(read_addr));
  (void)memcpy(&read_len, &(ecbptr()->ebw016),sizeof(read_len));
 
  client_sock = (int)ecbptr()->ebrout;
  ecbptr()->ebrout = PRIMECRAS;
 
  optval = MAX_BUFFER_LEN;
  optlen = sizeof(optval);
  rc = setsockopt(client_sock,SOL_SOCKET,SO_SNDBUF,(char *)&optval,
                  optlen);
 
  /*****************************************************/
  /* Call getpeername() to obtain client's information.*/
  /*****************************************************/
  rc = getpeername(client_sock,(struct sockaddr *)&name_sockaddr_in,
                               &sockaddr_in_length);
  if (rc == return_error)
  {
    printf("Error in getting peer name\n",sock_errno());
    close(client_sock);
    exit(0);
  }
 
  /********************************/
  /* Print out client information.*/
  /********************************/
  printf("Client Information\n");
  printf("-----------------------------------\n");
  printf("Socket            = %d\n",client_sock);
  printf("Client Address    = %x\n",name_sockaddr_in.sin_addr.s_addr);
  printf("Client Port No    = %d\n",name_sockaddr_in.sin_port);
  printf("-----------------------------------\n");
 
  /****************************/
  /* Read client's message.   */
  /****************************/
  echo_len = read(client_sock,read_addr,read_len);
  if (echo_len == return_error)
  {
    printf("Error in reading a msg - %d\n",sock_errno());
    close(client_sock);
    exit(0);
  }
  else
  {
    printf("messages = %s\n",read_addr);
  }
  rc = write(client_sock,read_addr,echo_len);
  if (rc == return_error)
  {
    printf("Error in sending echo - %d\n",sock_errno());
    (void)close(client_sock);
    exit(0);
  }
 
  /*************************************************************/
  /* Shutdown the communication link between client and server.*/
  /*************************************************************/
  rc = shutdown(client_sock,2);
  if (rc == return_error)
  {
    printf("Error in shutting down the client - %d\n",
           sock_errno());
  }
 
  /*********************************************/
  /* Clean up all sockets and exit the program.*/
  /*********************************************/
  rc = close(client_sock);
  if (rc == return_error)
  {
    printf("Error in closing client socket - %d\n",
           sock_errno());
  }
  printf("Terminated communication normally-stream AOR child\n");
  exit(0);
}