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

#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         	512

int		sockfd;


int	main(void)

{
int			n;
struct sockaddr_in	cli_addr, serv_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 *) &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);

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

	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);;

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

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

	exit(0);
}