#include #include #include #include #include #include #include void die(const char *msg) { perror(msg); exit(1); } int32_t get_date() { int32_t res; res = time(NULL); res += 2208988800; // epoch to braindead format return res; } int main(int argc, char *argv[]) { int sockfd; int newsockfd; int port = 37; socklen_t clilen; struct sockaddr_in serv_addr, cli_addr; int n; int32_t date; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) die("error opening socket."); bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(port); if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) die("error binding socket."); clilen = sizeof(cli_addr); while (1) { listen(sockfd, 5); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) die("error accepting"); date = get_date(); n = write(newsockfd, &date, 4); if (n < 0) die("error writing"); close(newsockfd); } close(sockfd); return 0; }