Blob Blame History Raw
/**
 * @mainpage
 *
 * @section overview Overview
 *
 * libqb is a library with the primary purpose of providing high-performance,
 * reusable features for client-server architecture, such as logging, tracing,
 * inter-process communication (IPC), and polling.  Except for some documented
 * anti-pattern use cases regarding IPC communication and logging, it is deemed
 * thread-safe.
 *
 * We don't intend this to be an all-encompassing library, but instead
 * provide very specially focused APIs that are highly tuned for maximum
 * performance for client/server applications.
 *
 * See the following pages for more info:
 * - @subpage qb_list_overview
 * - @subpage qb_atomic_overview
 * - @subpage qb_array_overview
 * - @subpage qb_map_overview
 * - @subpage qb_hdb_overview
 * - @subpage qb_rb_overview
 * - @subpage qb_loop_overview
 * - @subpage qb_log_overview
 * - @subpage qb_ipc_overview
 * - @subpage qb_util_overview
 */

/**
 * @page qb_rb_overview Ringbuffer
 * @copydoc qbrb.h
 * @see qbrb.h
 */

/**
 * @page qb_list_overview List
 * @copydoc qblist.h
 * @see qblist.h
 */

/**
 * @page qb_array_overview Array
 * @copydoc qbarray.h
 * @see qbarray.h
 */

/**
 * @page qb_map_overview Map
 * @copydoc qbmap.h
 * @see qbmap.h
 */

/** 
 * @page qb_hdb_overview Handle Database
 * @copydoc qbhdb.h
 * @see qbhdb.h
 */

/**
 * @page qb_loop_overview Main Loop
 * @copydoc qbloop.h
 * @see qbloop.h
 */

/**
 * @page qb_log_overview Logging
 * @copydoc qblog.h
 * @see qblog.h
 */

/**
 * @page qb_ipc_overview IPC Overview
 *
 * @par Overview
 * libqb provides a generically reusable very high performance shared memory IPC system for client
 * and service applications.  It supports many features including:
 * - Multiple transport implementations
 *   -# Shared memory implementation for very high performance.
 *   -# Unix sockets
 * - A synchronous request/response channel and asynchronous response channel per ipc connection.
 * - User defined private data per IPC connection.
 * - Ability to call a function per service on ipc connection and disconnection.
 * - Authenticated IPC connection with ability for developer to define which UIDs and GIDs are valid at connection time.
 * - Fully abstracted poll system so that any poll library may be used.
 * - User defined selector for determining the proper function to call per service and id.
 *
 * @par Security
 * The ipc system uses default operating system security mechanics to ensure ipc 
 * connections are validated.  A callback used with qb_ipcs_create() is called
 * for every new ipc connection with the parameters of UID and GID.  The callback
 * then determines if the UID and GID are authenticated for communication.
 *
 * @par Performance
 * For performance, QB_IPC_SHM (shared memory) is recommended. It is tuned for
 * very high performance.
 *
 * @par Multithreading
 * There are not many guarantees about the ipc system being thread-safe.
 * It is essential that all sends and all receives are in their own thread,
 * though having separate threads for each is supported.
 *
 * If you need to send on multiple threads then either use locking
 * around the calls or create a separate connection for each thread.
 *
 *
 * @par IPC sockets (Linux only)
 * On Linux IPC, abstract (non-filesystem) sockets are used by default. If you
 * need to override this (say in a net=host container) and use sockets that reside
 * in the filesystem, then you need to create a file called /etc/libqb/force-filesystem-sockets
 * - this is the default name and can be changed at ./configure time.
 * The file does not need to contain any content, it's not a configuration file as such,
 * just its presence will activate the feature.
 *
 * Note that this is a global option and read each time a new IPC connection
 * (client or server) is created. So, to avoid having clients that cannot
 * connect to running servers it is STRONGLY recommended to only create or remove
 * this file prior to a system reboot or container restart.
 *
 * @par Client API
 * @copydoc qbipcc.h
 * @see qbipcc.h
 *
 * @par Server API
 * @copydoc qbipcs.h
 * @see qbipcs.h
 *
 */

/**
 * @page qb_atomic_overview Atomic operations
 * @copydoc qbatomic.h
 * @see qbatomic.h
 */

/**
 * @page qb_util_overview Common Utilities
 * @copydoc qbutil.h
 * @see qbutil.h
 */