aboutsummaryrefslogtreecommitdiff
path: root/src/srvman.h
blob: f32145d94962a2be4f1d3a2200dd4367ede79ded (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/* This file is part of Smap.
   Copyright (C) 2005-2010, 2014 Sergey Poznyakoff

   Smap is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   Smap is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with Smap.  If not, see <http://www.gnu.org/licenses/>. */

#ifndef __SRVMAN_H
#define __SRVMAN_H

typedef struct smap_server *smap_server_t;

typedef	int (*smap_server_func_t) (const char *id,
				  int fd,
				  struct sockaddr const *sa, socklen_t len,
				  void *server_data, void *srvman_data);
typedef	int (*smap_server_prefork_hook_t) (const char *id,
					  struct sockaddr const *sa,
					  socklen_t len,
					  void *server_data,
					  void *srvman_data);
typedef	int (*smap_srvman_hook_t) (void *data);
typedef int (*smap_srvman_prefork_hook_t) (struct sockaddr const *sa,
					  socklen_t len,
					  void *data);

#define DEFAULT_PIDTAB_SIZE 64
#define DEFAULT_SHUTDOWN_TIMEOUT 5
#define DEFAULT_BACKLOG 8

#define SRV_SINGLE_PROCESS 0x01
#define SRV_KEEP_EXISTING  0x02

struct srvman_param {
	void *data;                 /* Server manager data */
	int single_process;
	int reuseaddr;
	unsigned shutdown_timeout;
	smap_srvman_hook_t idle_hook;             /* Idle function */
	smap_srvman_prefork_hook_t prefork_hook;  /* Pre-fork function */
	smap_srvman_hook_t free_hook;             /* Free function */
	size_t max_children;        /* Maximum number of sub-processes
				       to run. */
	int backlog;
	mode_t socket_mode;
};

enum srvman_bitop {
	srvman_bitop_asg,
	srvman_bitop_set,
	srvman_bitop_clr
};

extern struct srvman_param srvman_param;

smap_server_t smap_srvman_find_server(const char *id);

void smap_server_shutdown(smap_server_t srv);
smap_server_t smap_server_new(const char *id, const char *url,
			      smap_server_func_t conn, int flags);
void smap_server_free(smap_server_t srv);
void smap_server_set_prefork_hook(smap_server_t srv,
				 smap_server_prefork_hook_t hook);
void *smap_server_get_data_ptr(struct smap_server *srv);
void smap_server_set_data(smap_server_t srv,
			 void *data,
			 smap_srvman_hook_t free_hook);
void smap_server_set_max_children(smap_server_t srv, size_t n);
void smap_server_set_backlog(struct smap_server *srv, int n);
void smap_server_set_flags(struct smap_server *srv, int bit,
			   enum srvman_bitop op);
void smap_server_set_owner(struct smap_server *srv, uid_t uid, gid_t gid);
void smap_server_get_owner(struct smap_server *srv, uid_t *uid, gid_t *gid);
void smap_server_set_mode(struct smap_server *srv, mode_t mode);

int smap_srvman_get_sockaddr(const char *id, struct sockaddr const **psa,
			     int *plen);

void smap_srvman_attach_server(smap_server_t srv);
void smap_srvman_run(sigset_t *);
int smap_srvman_open(void);
void smap_srvman_shutdown(void);
void smap_srvman_free(void);
size_t smap_srvman_count_servers(void);
void smap_srvman_stop(void);

void smap_srvman_iterate_data(int (*fun)(struct smap_server *, void *));

#endif

Return to:

Send suggestions and report system problems to the System administrator.