aboutsummaryrefslogblamecommitdiffstats
path: root/servers-kernel.h
blob: 6839e9c914ea06f8f962198871c9996824feafb6 (plain) (tree)































































                                                           
/* 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