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