/* daytimetcpsrv.c - From Stevens, Network Programming Vol.1 with minor changes. Compile with % gcc -o server daytimetcpsrv.c Run with % server [] and a daytime server will sit on port [port 5000 by default]. */ #include #include #include #include #include /* basic system data types */ #include /* basic socket definitions */ #include /* timeval{} for select() */ #include /* timespec{} for pselect() */ #include /* sockaddr_in{} and other Internet defns */ int main(int argc, char **argv) { int listenfd, /* The listening socket */ connfd; /* The connected socket */ struct sockaddr_in servaddr; char buff[128+1]; time_t ticks; unsigned short port; port = (argc > 1) ? atoi(argv[1]) : 5000; listenfd = socket(AF_INET, SOCK_STREAM, 0); if (listenfd < 0) { perror("listen"); exit(1); } bzero((char *)&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(port); if(bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){ perror("bind"); exit(1); } if (listen(listenfd, 7) < 0) { perror("listen"); exit(1); } for ( ; ; ) { connfd = accept(listenfd, (struct sockaddr *) NULL, NULL); /* We use a NULL sockaddr since we do not care who is the client */ if (connfd < 0) { perror("connect"); exit(1); } ticks = time(NULL); sprintf(buff, "%.24s\r\n", ctime(&ticks)); write(connfd, buff, strlen(buff)); close(connfd); } }