gtpc1m6z | Transmission Control Protocol/Internet Protocol |
/******************************************************************/
/* 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);
}