chiark / gitweb /
db5cd2143c1d74bdec12dd06e6c7859cbf789f7a
[elogind.git] / socket.h
1 /*-*- Mode: C; c-basic-offset: 8 -*-*/
2
3 #ifndef foosockethfoo
4 #define foosockethfoo
5
6 typedef struct Socket Socket;
7
8 #include "name.h"
9 #include "socket-util.h"
10
11 typedef enum SocketState {
12         SOCKET_DEAD,
13         SOCKET_START_PRE,
14         SOCKET_START_POST,
15         SOCKET_LISTENING,
16         SOCKET_RUNNING,
17         SOCKET_STOP_PRE,
18         SOCKET_STOP_POST,
19         SOCKET_MAINTAINANCE,
20         _SOCKET_STATE_MAX
21 } SocketState;
22
23 typedef enum SocketExecCommand {
24         SOCKET_EXEC_START_PRE,
25         SOCKET_EXEC_START_POST,
26         SOCKET_EXEC_STOP_PRE,
27         SOCKET_EXEC_STOP_POST,
28         _SOCKET_EXEC_MAX
29 } SocketExecCommand;
30
31 typedef enum SocketType {
32         SOCKET_SOCKET,
33         SOCKET_FIFO
34 } SocketType;
35
36 typedef struct SocketPort SocketPort;
37
38 struct SocketPort {
39         SocketType type;
40
41         SocketAddress address;
42         char *path;
43
44         int fd;
45
46         LIST_FIELDS(SocketPort);
47 };
48
49 struct Socket {
50         Meta meta;
51
52         SocketState state;
53
54         LIST_HEAD(SocketPort, ports);
55
56         /* Only for INET6 sockets: issue IPV6_V6ONLY sockopt */
57         bool bind_ipv6_only;
58         unsigned backlog;
59
60         ExecCommand* exec_command[_SOCKET_EXEC_MAX];
61         ExecContext exec_context;
62
63         pid_t control_pid;
64
65         Service *service;
66 };
67
68 extern const NameVTable socket_vtable;
69
70 #endif