-/* ElemEchoTCPServer.c
+/* TCP_echod.c
*
- * Copyright (C) 2001 Simone Piccardi
+ * Copyright (C) 2001-2003 Simone Piccardi
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* Usage: echod -h give all info
*
- * $Id: TCP_echod.c,v 1.1 2003/05/02 09:50:55 piccardi Exp $
+ * $Id: TCP_echod.c,v 1.4 2003/06/18 21:19:24 piccardi Exp $
*
****************************************************************/
/*
#include <time.h>
#include <syslog.h> /* syslog system functions */
#include <signal.h> /* signal functions */
+#include <errno.h> /* error code */
#include "Gapil.h"
#define BACKLOG 10
#define MAXLINE 256
-int demonize = 1; /* daemon use option */
-int debugging = 0; /* debug info printing option */
+int demonize = 1; /* daemon use option: default is daemon */
+int debugging = 0; /* debug info printing option: default is no debug */
/* Subroutines declaration */
void usage(void);
void ServEcho(int sockfd);
* Variables definition
*/
int list_fd, conn_fd;
+ int waiting;
pid_t pid;
struct sockaddr_in serv_add;
/*
*/
int i;
opterr = 0; /* don't want writing to stderr */
- while ( (i = getopt(argc, argv, "hdi")) != -1) {
+ while ( (i = getopt(argc, argv, "hdiw:")) != -1) {
switch (i) {
/*
* Handling options
case 'd':
debugging = 1;
break;
+ case 'w':
+ waiting = strtol(optarg, NULL, 10);
+ break;
case '?': /* unrecognized options */
printf("Unrecognized options -%c\n",optopt);
usage();
PrintErr("listen error");
exit(1);
}
+ if (waiting) sleep(waiting);
/* handle echo to client */
while (1) {
/* accept connection */
- if ( (conn_fd = accept(list_fd, NULL, NULL)) < 0) {
+ while (((conn_fd = accept(list_fd, NULL, NULL)) < 0)
+ && (errno == EINTR));
+ if ( conn_fd < 0) {
PrintErr("accept error");
exit(1);
}