projects
/
gapil.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Un po' di materiale su {{{splice}}} e inizio della ripulitura degli
[gapil.git]
/
sources
/
TCP_echod.c
diff --git
a/sources/TCP_echod.c
b/sources/TCP_echod.c
index 689049265861498279830c4fe0626f8ff22ac9c8..a7f0d2993679b95e3846cedb249c11ad90d2422d 100644
(file)
--- a/
sources/TCP_echod.c
+++ b/
sources/TCP_echod.c
@@
-26,23
+26,21
@@
*
* Usage: echod -h give all info
*
*
* Usage: echod -h give all info
*
- * $Id$
- *
****************************************************************/
/*
* Include needed headers
*/
****************************************************************/
/*
* Include needed headers
*/
-#include <sys/types.h> /* pr
edefined
types */
-#include <unistd.h> /*
include
unix standard library */
+#include <sys/types.h> /* pr
imitive system data
types */
+#include <unistd.h> /* unix standard library */
#include <arpa/inet.h> /* IP addresses conversion utiliites */
#include <arpa/inet.h> /* IP addresses conversion utiliites */
-#include <sys/socket.h> /* socket
library
*/
-#include <stdio.h> /*
include
standard I/O library */
-#include <time.h>
+#include <sys/socket.h> /* socket
constants, types and functions
*/
+#include <stdio.h> /* standard I/O library */
+#include <time.h>
/* date and time constants, types and functions */
#include <syslog.h> /* syslog system functions */
#include <syslog.h> /* syslog system functions */
-#include <signal.h> /* signal functions */
-#include <errno.h> /* error
code
*/
-#include <string.h> /*
error strings
*/
-#include <stdlib.h>
+#include <signal.h> /* signal
constants, types and
functions */
+#include <errno.h> /* error
definitions and routines
*/
+#include <string.h> /*
C strings library
*/
+#include <stdlib.h>
/* C standard library */
#include "Gapil.h"
#include "Gapil.h"
@@
-62,9
+60,11
@@
int main(int argc, char *argv[])
*/
int list_fd, conn_fd;
int waiting = 0;
*/
int list_fd, conn_fd;
int waiting = 0;
+ int keepalive = 0;
+ int reuse = 0;
int compat = 0;
pid_t pid;
int compat = 0;
pid_t pid;
- struct sockaddr_in
serv_add,
cli_add;
+ struct sockaddr_in cli_add;
socklen_t len;
char debug[MAXLINE], ipaddr[20];
/*
socklen_t len;
char debug[MAXLINE], ipaddr[20];
/*
@@
-73,7
+73,7
@@
int main(int argc, char *argv[])
*/
int i;
opterr = 0; /* don't want writing to stderr */
*/
int i;
opterr = 0; /* don't want writing to stderr */
- while ( (i = getopt(argc, argv, "hdicw:")) != -1) {
+ while ( (i = getopt(argc, argv, "h
kr
dicw:")) != -1) {
switch (i) {
/*
* Handling options
switch (i) {
/*
* Handling options
@@
-86,6
+86,12
@@
int main(int argc, char *argv[])
case 'i':
demonize = 0;
break;
case 'i':
demonize = 0;
break;
+ case 'k':
+ keepalive = 1;
+ break;
+ case 'r':
+ reuse = 1;
+ break;
case 'c':
compat = 1;
break;
case 'c':
compat = 1;
break;
@@
-116,7
+122,8
@@
int main(int argc, char *argv[])
SignalRestart(SIGCHLD, HandSigCHLD); /* restarting handler */
}
/* create and bind socket */
SignalRestart(SIGCHLD, HandSigCHLD); /* restarting handler */
}
/* create and bind socket */
- if ( (list_fd = sockbind(NULL, "echo", 6, SOCK_STREAM)) < 0) {
+ if ( (list_fd = sockbindopt(argv[optind], "echo", 6,
+ SOCK_STREAM, reuse)) < 0) {
return 1;
}
/* release privileges and go daemon */
return 1;
}
/* release privileges and go daemon */
@@
-167,6
+174,10
@@
int main(int argc, char *argv[])
}
if (pid == 0) { /* child */
close(list_fd); /* close listening socket */
}
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);
ServEcho(conn_fd); /* handle echo */
if (debugging) {
snprintf(debug, MAXLINE, "Closed connection %s\n", ipaddr);
@@
-193,6
+204,8
@@
void usage(void) {
printf(" echod [-h] \n");
printf(" -h print this help\n");
printf(" -d write debug info\n");
printf(" echod [-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");
printf(" -i use interactively\n");
printf(" -c disable BSD semantics\n");
printf(" -w N wait N sec. before calling accept\n");