#include "cliserv.h"

int main(int argc, char *argv[])
{
   struct sockaddr_in serv, cli;
	char request[REQUEST], reply[REPLY];
	int listenfd, sockfd, n, clilen;

	if ((listenfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
	{
	   perror("socket");
		exit(EXIT_FAILURE);
	}

	memset(&serv, 0, sizeof(serv));
	serv.sin_family = AF_INET;
	serv.sin_addr.s_addr = htonl(INADDR_ANY);
	serv.sin_port = htons(PORT);

   if (bind(listenfd, (SA) &serv, sizeof(serv)) < 0)
	{
	   perror("bind");
		exit(EXIT_FAILURE);
	}

   if (listen(listenfd, SOMAXCONN) < 0)
	{
	   perror("listen");
		exit(EXIT_FAILURE);
	}

	for (;;)
	{
	   clilen = sizeof(cli);
		if ((sockfd = accept(listenfd, (SA) &cli, &clilen)) < 0)
		{
	      perror("accept");
		   exit(EXIT_FAILURE);
	   }

		printf("accepted\n");

		if ((n = read_stream(sockfd, request, REQUEST )) < 0)
		{
		   perror("server read_stream error");
		   exit(EXIT_FAILURE);
	   }

		printf("request is [%s]\n", request);
		sprintf(reply, "how are you");

		if (send(sockfd, reply, REPLY, MSG_EOF) != REPLY)
		{
	      perror("send");
		   exit(EXIT_FAILURE);
	   }
		printf("sent reply\n");

		printf("closing socket\n");
		close(sockfd);
		printf("finished closing socket\n");
	}
}
