#include "inet.h"


#define EPORT 3001
void main()
{

  int sockfd,newsockfd,childpid,clilen;
  struct sockaddr_in servaddr,cliaddr;


  
  if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
  
   perror("socket error");
  
  //bzero((char*)&servaddr,sizeof(servaddr));
  servaddr.sin_family=AF_INET;
  servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
  servaddr.sin_port=htons(EPORT);


  
  if(bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
    perror("can't bind");
  


  listen(sockfd,5);
  
 

  const int MAXLEN = 2048;

  cout << "\nEcho Server started...\n" << flush;
  while(1)
    {
      
      clilen=sizeof(cliaddr);
      newsockfd=accept(sockfd,(struct sockaddr*)&cliaddr,&clilen);

      if(newsockfd<0)
	perror("accept error");

      if((childpid=fork())<0)
	perror(" fork error");
      else if(childpid==0)
	{
	  
	  char buf[2048];
	  close(sockfd);
	  while(1)
	    {
	      int n=recv(newsockfd,buf,MAXLEN,0);
	
	      if(n==0)
		{
		  break;
		}
	      else if(n<0)
		{
		  perror("recv error");
		  break;
		}
	      buf[n]=0;
	      cout << buf;
	      
	      if(send(newsockfd,buf,n,0)==-1)
		{
		  perror("Send error");
		  break;
		}
	      

	    }

	  exit(0);
	  
	}

      close(newsockfd);

    }

  
}

     






