fixes init script for non ipv6 enabled systems #472755
[packages/xinetd.git] / xinetd / server.h
1 /*
2  * (c) Copyright 1992 by Panagiotis Tsirigotis
3  * (c) Sections Copyright 1998-2001 by Rob Braun
4  * All rights reserved.  The file named COPYRIGHT specifies the terms 
5  * and conditions for redistribution.
6  */
7
8 #ifndef SERVER_H
9 #define SERVER_H
10
11 /*
12  * $Id: server.h,v 1.2 2003/08/06 06:12:10 bbraun Exp $
13  */
14
15 #include "config.h"
16 #include <sys/types.h>
17 #include <sys/wait.h>
18 #include <time.h>
19
20 #include "defs.h"
21 #include "pset.h"
22
23 #ifdef NO_POSIX_TYPES
24 typedef int pid_t ;
25 #endif
26
27
28 /*
29  * This struct describes running servers
30  */
31 struct server
32 {
33    pid_t           svr_pid ;
34    time_t          svr_start_time ;
35    connection_s   *svr_conn ;
36    struct service *svr_sp ;              /* service that owns this server    */
37    int             svr_fork_failures ;   /* number of fork(2) failures       */
38    int             svr_exit_status ;
39    bool_int        svr_log_remote_user ;
40    bool_int        svr_writes_to_log ;   /* needed because a service may be   */
41                                          /* reconfigured between server       */
42                                          /*   forking and exit                */
43 } ;
44
45 #define SERP( p )                       ((struct server *)(p))
46
47 #define SERVER_SERVICE( serp )         (serp)->svr_sp
48 #define SERVER_CONNECTION( serp)       (connection_s *)(serp)->svr_conn
49 #define SERVER_CONNSERVICE( serp )     CONN_SERVICE( SERVER_CONNECTION( serp ) )
50 #define SERVER_FD( serp )              CONN_DESCRIPTOR( (serp)->svr_conn )
51 #define SERVER_PID( serp )             (serp)->svr_pid
52 #define SERVER_EXITSTATUS( serp )      (serp)->svr_exit_status
53 #define SERVER_STARTTIME( serp )       (serp)->svr_start_time
54 #define SERVER_LOGUSER( serp )         (serp)->svr_log_remote_user
55 #define SERVER_FORK_FAILURES( serp )   (serp)->svr_fork_failures
56 #define SERVER_WRITES_TO_LOG( serp )   (serp)->svr_writes_to_log
57
58 #define SERVER_FORKLIMIT( serp )         \
59                   ( (serp)->svr_fork_failures >= MAX_FORK_FAILURES )
60
61 #define SERVER_SET_PID( serp, pid )      (serp)->svr_pid = (pid)
62 #define SERVER_SET_EXIT_STATUS( serp, status )   \
63                   (serp)->svr_exit_status = (status)
64
65
66 /*
67  * Macros for compatibility
68  */
69 #ifndef OLD_WAIT
70 #define PROC_EXITED( s )         WIFEXITED( s )
71 #define PROC_SIGNALED( s )       WIFSIGNALED( s )
72 #define PROC_STOPPED( s )        WIFSTOPPED( s )
73 #define PROC_EXITSTATUS( s )     WEXITSTATUS( s )
74 #define PROC_TERMSIG( s )        WTERMSIG( s )
75 #else
76 #define PROC_EXITED( s )         WIFEXITED( *(union wait *)&(s) )
77 #define PROC_SIGNALED( s )       WIFSIGNALED( *(union wait *)&(s) )
78 #define PROC_STOPPED( s )        WIFSTOPPED( *(union wait *)&(s) )
79 #define PROC_EXITSTATUS( s )     (((union wait *)&(s))->w_T.w_Retcode)
80 #define PROC_TERMSIG( s )        (((union wait *)&(s))->w_T.w_Termsig)
81 #endif   /* OLD_WAIT */
82
83 void server_release(struct server *serp);
84 status_e server_run(struct service *sp,connection_s *cp);
85 status_e server_start(struct server *serp);
86 void server_dump(const struct server *serp,int fd);
87 void server_end(struct server *serp);
88 struct server *server_lookup(pid_t pid);
89 struct server *server_alloc( const struct server *init_serp );
90
91 #endif   /* SERVER_H */
92