X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=listati%2FTCP_cunc_daytimed.c;fp=listati%2FTCP_cunc_daytimed.c;h=9af8cc772ba2c0a2122fa2672f21b18305bb025f;hb=d47f15496fa85c8ec22edcde608f2665ec5b95ae;hp=0000000000000000000000000000000000000000;hpb=b324b7a09e071b2f84a1849d109d4d14f27f44cd;p=gapil.git diff --git a/listati/TCP_cunc_daytimed.c b/listati/TCP_cunc_daytimed.c new file mode 100644 index 0000000..9af8cc7 --- /dev/null +++ b/listati/TCP_cunc_daytimed.c @@ -0,0 +1,52 @@ +#include /* predefined types */ +#include /* include unix standard library */ +#include /* IP addresses conversion utililites */ +#include /* socket library */ +#include /* include standard I/O library */ +#include + +int main(int argc, char *argv[]) +{ + int list_fd, conn_fd; + int i; + struct sockaddr_in serv_add, client; + char buffer[MAXLINE]; + socklen_t len; + time_t timeval; + pid_t pid; + int logging=0; + ... + /* write daytime to client */ + while (1) { + if ( (conn_fd = accept(list_fd, (struct sockaddr *)&client, &len)) + <0 ) { + perror("accept error"); + exit(-1); + } + /* fork to handle connection */ + if ( (pid = fork()) < 0 ){ + perror("fork error"); + exit(-1); + } + if (pid == 0) { /* child */ + close(list_fd); + timeval = time(NULL); + snprintf(buffer, sizeof(buffer), "%.24s\r\n", ctime(&timeval)); + if ( (write(conn_fd, buffer, strlen(buffer))) < 0 ) { + perror("write error"); + exit(-1); + } + if (logging) { + inet_ntop(AF_INET, &client.sin_addr, buffer, sizeof(buffer)); + printf("Request from host %s, port %d\n", buffer, + ntohs(client.sin_port)); + } + close(conn_fd); + exit(0); + } else { /* parent */ + close(conn_fd); + } + } + /* normal exit, never reached */ + exit(0); +}