/*
* echoserveri.c - An iterative echo server
*//* $begin echoserverimain */#include"csapp.h"voidecho(intconnfd){size_tn;charbuf[MAXLINE];rio_trio;Rio_readinitb(&rio,connfd);while((n=Rio_readlineb(&rio,buf,MAXLINE))!=0){//line:netp:echo:eof
printf("server received %d bytes\n",n);Rio_writen(connfd,buf,n);}}intmain(intargc,char**argv){intlistenfd,connfd,port,clientlen;structsockaddr_inclientaddr;structhostent*hp;char*haddrp;if(argc!=2){fprintf(stderr,"usage: %s <port>\n",argv[0]);exit(0);}port=atoi(argv[1]);listenfd=Open_listenfd(port);while(1){clientlen=sizeof(clientaddr);connfd=Accept(listenfd,(SA*)&clientaddr,&clientlen);/* determine the domain name and IP address of the client */hp=Gethostbyaddr((constchar*)&clientaddr.sin_addr.s_addr,sizeof(clientaddr.sin_addr.s_addr),AF_INET);haddrp=inet_ntoa(clientaddr.sin_addr);printf("server connected to %s (%s)\n",hp->h_name,haddrp);echo(connfd);Close(connfd);}exit(0);}/* $end echoserverimain */