/*      simple talk program (UDP version) - server       */

#include        <stdio.h>
#include        <fcntl.h>
#include        <signal.h>
#include        <sys/types.h>
#include        <sys/socket.h>
#include        <netinet/in.h>
#include        <arpa/inet.h>

#define         SERV_UDP_PORT           6000
#define         SERV_HOST_ADDR          "128.197.11.14"
#define         CLI_UDP_PORT            6000
#define         CLI_HOST_ADDR           "128.197.11.17"

#define         MAXLINE                 2048

int                     sockfd;


int     main(void)

{
int			n;
struct sockaddr_in	serv_addr, cli_addr;
char                    sendline[MAXLINE];
void                    sigio_handler(int);


	if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
		err_sys("socket");

        if (fcntl(sockfd, F_SETOWN, getpid()) == -1)
                err_sys("fcntl");

        if (fcntl(sockfd, F_SETFL, FASYNC) == -1)
                err_sys("fcntl");

        if (signal(SIGIO, sigio_handler) == SIG_ERR)
                err_sys("signal");

	bzero( (char *) &serv_addr, sizeof(serv_addr));
	serv_addr.sin_family = AF_INET;
	serv_addr.sin_addr.s_addr = inet_addr(SERV_HOST_ADDR);;
	serv_addr.sin_port = htons(SERV_UDP_PORT);;

	if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr))
			< 0)
		err_sys("bind");

	bzero( (char *) &cli_addr, sizeof(cli_addr));
	cli_addr.sin_family = AF_INET;
	cli_addr.sin_addr.s_addr = inet_addr(CLI_HOST_ADDR);;
	cli_addr.sin_port = htons(CLI_UDP_PORT);;

        while(fgets(sendline, MAXLINE, stdin) != NULL) {

		n = strlen(sendline);
                if (sendto(sockfd, sendline, n, 0, (struct sockaddr *) 
				&cli_addr, sizeof(cli_addr)) != n)
			err_sys("sendto");
        }

	exit(0);
}