aboutsummaryrefslogtreecommitdiffstats
path: root/servers-kernel.h
blob: 6839e9c914ea06f8f962198871c9996824feafb6 (plain) (blame)
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
/* See LICENSE file for copyright and license details. */
#ifndef SERVERS_KERNEL_H
#define SERVERS_KERNEL_H

#ifndef GCC_ONLY
# if defined(__GNUC__) && !defined(__clang__)
#  define GCC_ONLY(...) __VA_ARGS__
# else
#  define GCC_ONLY(...) /* nothing */
# endif
#endif

/**
 * Get the pathname of the socket
 * 
 * @return  The pathname of the socket, `NULL` on error
 */
GCC_ONLY(__attribute__((__malloc__)))
char *get_socket_pathname(void);

/**
 * Get the pathname of the PID file
 * 
 * @return  The pathname of the PID file, `NULL` on error
 */
GCC_ONLY(__attribute__((__malloc__)))
char *get_pidfile_pathname(void);

/**
 * Get the pathname of the state file
 * 
 * @return  The pathname of the state file, `NULL` on error
 */
GCC_ONLY(__attribute__((__malloc__)))
char *get_state_pathname(void);

/**
 * Create PID file
 * 
 * @param   pidpath  The pathname of the PID file
 * @return           Zero on success, -1 on error,
 *                   -2 if the service is already running
 */
GCC_ONLY(__attribute__((__nonnull__)))
int create_pidfile(char *pidpath);

/**
 * Create socket and start listening
 * 
 * @param   socketpath  The pathname of the socket
 * @return              Zero on success, -1 on error
 */
GCC_ONLY(__attribute__((__nonnull__)))
int create_socket(const char *socketpath);

/**
 * Close and unlink the socket
 * 
 * @param  socketpath  The pathname of the socket
 */
GCC_ONLY(__attribute__((__nonnull__)))
void close_socket(const char *socketpath);

#endif