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