From 9d680e079317fb8b16a65edbc016fbe66df96fa3 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sat, 16 Jun 2007 10:52:39 +0000 Subject: [PATCH] Correzioni minime e notizia lulu.com sul sito --- html/download.html | 27 ++++++++ html/gapil.html | 5 ++ sources/TCP_countd.c | 143 +------------------------------------------ 3 files changed, 35 insertions(+), 140 deletions(-) diff --git a/html/download.html b/html/download.html index d9d6604..fff2bff 100644 --- a/html/download.html +++ b/html/download.html @@ -132,6 +132,33 @@ Archivio dei sorgenti +

+ Se poi volete proprio una versione cartacea, ho messo a + disposizione la guida su lulu.com, che fornisce un servizio di + stampa a richiesta; al momento è disponibile solo la versione + completa dalla guida, all'indirizzo: +

+ si tenga presente che per sua natura questa tenderà a variare + parecchio, essendo la guida in costante sviluppo.

+

+ Il costo in più della versione stampata (ed anche quello del + download, che comunque potrete effettuare gratis da qui) sarà + usato come supporto allo sviluppo: mi impegno ad aggiungere due + pagine alla guida (che per mancanza di tempo riesco a sviluppare + sempre meno) per ogni copia acquistata.

+

+ A breve seguirà, per quanti preferiscono avere un libro il cui + contenuto non subisce aggiornamente radicali ogni settimana, la + pubblicazione della prima parte della guida, che a quel punto non + dovrebbe subire variazioni rilevanti essendo sostanzialmente + completa.

+ diff --git a/html/gapil.html b/html/gapil.html index c8571f3..7267b46 100644 --- a/html/gapil.html +++ b/html/gapil.html @@ -176,6 +176,11 @@ + 5 - gennaio - 2007
Pubblicata una versione + stampabile a richiesta su lulu.com, ordinabile all'indirizzo + + http://www.lulu.com/content/612937. +

1 - giugno - 2006
Nuova revisione con varie aggiunte e correzioni, in occasione della pubblicazione sul DVD di LinuxPro. diff --git a/sources/TCP_countd.c b/sources/TCP_countd.c index 43082c0..4e788e9 100644 --- a/sources/TCP_countd.c +++ b/sources/TCP_countd.c @@ -62,8 +62,6 @@ int main(int argc, char *argv[]) * Variables definition */ int list_fd, conn_fd; - int waiting = 0; - int keepalive = 0; int reuse = 0; int compat = 0; pid_t pid; @@ -76,7 +74,7 @@ int main(int argc, char *argv[]) */ int i; opterr = 0; /* don't want writing to stderr */ - while ( (i = getopt(argc, argv, "hkrdicw:")) != -1) { + while ( (i = getopt(argc, argv, "hrdic")) != -1) { switch (i) { /* * Handling options @@ -89,9 +87,6 @@ int main(int argc, char *argv[]) case 'i': demonize = 0; break; - case 'k': - keepalive = 1; - break; case 'r': reuse = 1; break; @@ -101,9 +96,6 @@ int main(int argc, char *argv[]) case 'd': debugging = 1; break; - case 'w': - waiting = strtol(optarg, NULL, 10); - break; case '?': /* unrecognized options */ printf("Unrecognized options -%c\n",optopt); usage(); @@ -125,7 +117,7 @@ int main(int argc, char *argv[]) SignalRestart(SIGCHLD, HandSigCHLD); /* restarting handler */ } /* create and bind socket */ - if ( (list_fd = sockbindopt(argv[optind], "echo", 6, + if ( (list_fd = sockbindopt(argv[optind], "1234", 6, SOCK_STREAM, reuse)) < 0) { return 1; } @@ -150,7 +142,6 @@ int main(int argc, char *argv[]) PrintErr("listen error"); exit(1); } - if (waiting) sleep(waiting); /* handle echo to client */ while (1) { /* accept connection */ @@ -177,11 +168,6 @@ int main(int argc, char *argv[]) } if (pid == 0) { /* child */ close(list_fd); /* close listening socket */ - if (keepalive) { /* enable keepalive ? */ - setsockopt(conn_fd, SOL_SOCKET, SO_KEEPALIVE, - &keepalive, sizeof(keepalive)); - } - ServEcho(conn_fd); /* handle echo */ if (debugging) { snprintf(debug, MAXLINE, "Closed connection %s\n", ipaddr); if (demonize) { @@ -202,48 +188,17 @@ int main(int argc, char *argv[]) * routine to print usage info and exit */ void usage(void) { - printf("A counter server\n"); + printf("Elementary connection counter server\n"); printf("Usage:\n"); printf(" countd [-h] \n"); printf(" -h print this help\n"); printf(" -d write debug info\n"); - printf(" -k enable SO_KEEPALIVE\n"); printf(" -r enable SO_REUSEADDR\n"); printf(" -i use interactively\n"); printf(" -c disable BSD semantics\n"); printf(" -w N wait N sec. before calling accept\n"); exit(1); } -/* - * routine to handle echo for connection - */ -void ServEcho(int sockfd) { - char buffer[MAXLINE]; - int nread, nwrite; - char debug[MAXLINE+20]; - /* main loop, reading 0 char means client close connection */ - while ( (nread = read(sockfd, buffer, MAXLINE)) != 0) { - if (nread < 0) { - PrintErr("Errore in lettura"); - return; - } - nwrite = FullWrite(sockfd, buffer, nread); - if (nwrite) { - PrintErr("Errore in scrittura"); - return; - } - if (debugging) { - buffer[nread] = 0; - snprintf(debug, MAXLINE+20, "Letti %d byte, %s", nread, buffer); - if (demonize) { /* daemon mode */ - syslog(LOG_DEBUG, debug); - } else { - printf("%s", debug); - } - } - } - return; -} /* * routine to print error on stout or syslog */ @@ -256,95 +211,3 @@ void PrintErr(char * error) { return; } - -#define MAXLINE 80 -#define BACKLOG 10 -/* Program begin */ -void usage(void); -int main(int argc, char *argv[]) -{ -/* - * Variables definition - */ - int list_fd, conn_fd; - int i; - struct sockaddr_in serv_add; - char buffer[MAXLINE]; - time_t timeval; - /* - * Input section: decode parameters passed in the calling - * Use getopt function - */ - opterr = 0; /* don't want writing to stderr */ - while ( (i = getopt(argc, argv, "h")) != -1) { - switch (i) { - /* - * Handling options - */ - case 'h': - printf("Wrong -h option use\n"); - usage(); - return(0); - break; - case '?': /* unrecognized options */ - printf("Unrecognized options -%c\n",optopt); - usage(); - default: /* should not reached */ - usage(); - } - } - /* *********************************************************** - * - * Options processing completed - * - * Main code beginning - * - * ***********************************************************/ - /* create socket */ - if ( (list_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { - perror("Socket creation error"); - exit(-1); - } - /* initialize address */ - memset((void *)&serv_add, 0, sizeof(serv_add)); /* clear server address */ - serv_add.sin_family = AF_INET; /* address type is INET */ - serv_add.sin_port = htons(13); /* daytime port is 13 */ - serv_add.sin_addr.s_addr = htonl(INADDR_ANY); /* connect from anywhere */ - /* bind socket */ - if (bind(list_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) { - perror("bind error"); - exit(-1); - } - /* listen on socket */ - if (listen(list_fd, BACKLOG) < 0 ) { - perror("listen error"); - exit(-1); - } - /* write daytime to client */ - while (1) { - if ( (conn_fd = accept(list_fd, (struct sockaddr *) NULL, NULL)) <0 ) { - perror("accept error"); - exit(-1); - } - 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); - } - close(conn_fd); - } - - /* normal exit */ - exit(0); -} -/* - * routine to print usage info and exit - */ -void usage(void) { - printf("Simple daytime server\n"); - printf("Usage:\n"); - printf(" daytimed [-h] \n"); - printf(" -h print this help\n"); - exit(1); -} -- 2.30.2