1 #include	"unp.h"
2 #include	<time.h>
3 
4 int
main(int argc,char ** argv)5 main(int argc, char **argv)
6 {
7 	int				listenfd, connfd;
8 	socklen_t		addrlen, len;
9 	struct sockaddr	*cliaddr;
10 	struct linger	ling;
11 	char			buff[MAXLINE];
12 	time_t			ticks;
13 
14 	if (argc == 2)
15 		listenfd = Tcp_listen(NULL, argv[1], &addrlen);
16 	else if (argc == 3)
17 		listenfd = Tcp_listen(argv[1], argv[2], &addrlen);
18 	else
19 		err_quit("usage: daytimetcpsrv3 [ <host> ] <service or port>");
20 
21 	cliaddr = Malloc(addrlen);
22 
23 	for ( ; ; ) {
24 		len = addrlen;
25 		connfd = Accept(listenfd, cliaddr, &len);
26 		printf("connection from %s\n", Sock_ntop(cliaddr, len));
27 
28 			/* force RST instead of FIN after data */
29 		ling.l_onoff = 1;
30 		ling.l_linger = 0;
31 		Setsockopt(connfd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
32 
33         ticks = time(NULL);
34         snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
35         Write(connfd, buff, strlen(buff));
36 
37 		sleep(2);	/* let data get across before RST */
38 		Close(connfd);
39 	}
40 }
41