diff options
Diffstat (limited to 'contrib/tcp_wrappers/clean_exit.c')
-rw-r--r-- | contrib/tcp_wrappers/clean_exit.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/contrib/tcp_wrappers/clean_exit.c b/contrib/tcp_wrappers/clean_exit.c new file mode 100644 index 0000000..cb9d4f5 --- /dev/null +++ b/contrib/tcp_wrappers/clean_exit.c @@ -0,0 +1,42 @@ + /* + * clean_exit() cleans up and terminates the program. It should be called + * instead of exit() when for some reason the real network daemon will not or + * cannot be run. Reason: in the case of a datagram-oriented service we must + * discard the not-yet received data from the client. Otherwise, inetd will + * see the same datagram again and again, and go into a loop. + * + * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands. + */ + +#ifndef lint +static char sccsid[] = "@(#) clean_exit.c 1.4 94/12/28 17:42:19"; +#endif + +#include <stdio.h> + +extern void exit(); + +#include "tcpd.h" + +/* clean_exit - clean up and exit */ + +void clean_exit(request) +struct request_info *request; +{ + + /* + * In case of unconnected protocols we must eat up the not-yet received + * data or inetd will loop. + */ + + if (request->sink) + request->sink(request->fd); + + /* + * Be kind to the inetd. We already reported the problem via the syslogd, + * and there is no need for additional garbage in the logfile. + */ + + sleep(5); + exit(0); +} |