Introduce pet-projects dir
[lcapit-junk-code.git] / books / tcpv1 / day-time / daytimetcpsrv.c
blob5b67a826bb7a3a18057d330df7c1a1a21833792e
1 #include <stdio.h>
2 #include <time.h>
3 #include <unistd.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <sys/types.h>
7 #include <sys/socket.h>
8 #include <arpa/inet.h>
10 #define MAXLINE 4096
12 int main(int argc, char *argv[])
14 ssize_t ret;
15 time_t ticks;
16 char buf[MAXLINE];
17 int err, len, listenfd, connfd;
18 struct sockaddr_in servaddr, cliaddr;
20 listenfd = socket(AF_INET, SOCK_STREAM, 0);
21 if (listenfd < 0) {
22 perror("socket()");
23 exit(1);
26 memset(&servaddr, 0, sizeof(servaddr));
27 servaddr.sin_family = AF_INET;
28 servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
29 servaddr.sin_port = htons(13);
31 err = bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
32 if (err < 0) {
33 perror("bind()");
34 exit(1);
37 err = listen(listenfd, 3);
38 if (err < 0) {
39 perror("listen()");
40 exit(1);
43 for (;;) {
44 len = sizeof(cliaddr);
45 connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &len);
46 if (connfd < 0) {
47 perror("accept()");
48 exit(1);
50 printf("connection from %s, port %d\n",
51 inet_ntop(AF_INET, &cliaddr.sin_addr, buf, sizeof(buf)),
52 ntohs(cliaddr.sin_port));
54 ticks = time(NULL);
55 memset(buf, '\0', sizeof(buf));
56 snprintf(buf, sizeof(buf), "%.24s", ctime(&ticks));
57 printf("%s: Handling a connection\n", buf);
59 memset(buf, '\0', sizeof(buf));
60 snprintf(buf, sizeof(buf), "%.24s\r\n", ctime(&ticks));
61 ret = write(connfd, buf, strlen(buf));
62 if (ret != strlen(buf)) {
63 perror("write()");
64 exit(1);
67 err = close(connfd);
68 if (err < 0) {
69 perror("close()");
70 exit(1);
74 exit(0);