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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
/**
* @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
*/
|