1 #include	"unp.h"
2 
3 int
main(int argc,char ** argv)4 main(int argc, char **argv)
5 {
6 	int					listenfd, connfd;
7 	pid_t				childpid;
8 	socklen_t			clilen;
9 	struct sockaddr_in	cliaddr, servaddr;
10 	void				sig_chld(int);
11 
12 	listenfd = Socket(AF_INET, SOCK_STREAM, 0);
13 
14 	bzero(&servaddr, sizeof(servaddr));
15 	servaddr.sin_family      = AF_INET;
16 	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
17 	servaddr.sin_port        = htons(SERV_PORT);
18 
19 	Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
20 
21 	Listen(listenfd, LISTENQ);
22 
23 	Signal(SIGCHLD, sig_chld);
24 
25 	for ( ; ; ) {
26 		clilen = sizeof(cliaddr);
27 		if ( (connfd = accept(listenfd, (SA *) &cliaddr, &clilen)) < 0) {
28 			if (errno == EINTR)
29 				continue;		/* back to for() */
30 			else
31 				err_sys("accept error");
32 		}
33 
34 		if ( (childpid = Fork()) == 0) {	/* child process */
35 			Close(listenfd);	/* close listening socket */
36 			str_echo(connfd);	/* process the request */
37 			exit(0);
38 		}
39 		Close(connfd);			/* parent closes connected socket */
40 	}
41 }
42