📄 ipc.h
字号:
* * Parameters: * ch (IN) : the channel which contains the connection. * msg (IN) : pointer to the sending message. User must * allocate the message space. * * Return values: * IPC_OK : the message was either sent out successfully or * appended to the send_queue. * IPC_FAIL : the send operation failed. * IPC_BROKEN : the channel is broken. **/ int (* send) (IPC_Channel * ch, IPC_Message* msg);/* * IPC_OPS::recv * receive the message through receving queue. * * Parameters: * ch (IN) : the channel which contains the connection. * msg (OUT): the IPC_MESSAGE** pointer which contains the pointer * to the received message or NULL if there is no * message available. * * Return values: * IPC_OK : receive operation is completed successfully. * IPC_FAIL : operation failed. * IPC_BROKEN : the channel is broken (disconnected) * * Note: * return value IPC_OK doesn't mean the message is already * sent out to (or received by) the peer. It may be pending * in the send_queue. In order to make sure the message is no * longer needed, please specify the msg_done function in the * message structure and once this function is called, the * message is no longer needed. * * is_sending_blocked() is another way to check if there is a message * pending in the send_queue. * */ int (* recv) (IPC_Channel * ch, IPC_Message** msg);/* * IPC_OPS::waitin * Wait for input to become available * * Parameters: * ch (IN) : the channel which contains the connection. * * Side effects: * If output becomes unblocked while waiting, it will automatically * be resumed without comment. * * Return values: * IPC_OK : a message is pending or output has become unblocked. * IPC_FAIL : operation failed. * IPC_BROKEN : the channel is broken (disconnected) * IPC_INTR : waiting was interrupted by a signal */ int (* waitin) (IPC_Channel * ch);/* * IPC_OPS::waitout * Wait for output to finish * * Parameters: * ch (IN) : the channel which contains the connection. * * Side effects: * If input becomes available while waiting, it will automatically * be read into the channel queue without comment. * * Return values: * IPC_OK : output no longer blocked * IPC_FAIL : operation failed. * IPC_BROKEN : the channel is broken (disconnected) * IPC_INTR : waiting was interrupted by a signal */ int (* waitout) (IPC_Channel * ch);/* * IPC_OPS::is_message_pending * check to see if there is any messages ready to read, or hangup has * occurred. * * Parameters: * ch (IN) : the pointer to the channel. * * Return values: * TRUE : there are messages ready to read, or hangup. * FALSE: there are no messages ready to be read. */ gboolean (* is_message_pending) (IPC_Channel * ch);/* * IPC_OPS::is_sending_blocked * check the send_queue to see if there are any messages blocked. * * Parameters: * ch (IN) : the pointer to the channel. * * Return values: * TRUE : there are messages blocked (waiting) in the send_queue. * FALSE: there are no message blocked (waiting) in the send_queue. * * See also: * get_send_select_fd() */ gboolean (* is_sending_blocked) (IPC_Channel *ch);/* * IPC_OPS::resume_io * Resume all possible IO operations through the IPC transport * * Parameters: * the pointer to the channel. * * Return values: * IPC_OK : resume all the possible I/O operation successfully. * IPC_FAIL : the operation fails. * IPC_BROKEN : the channel is broken. * */ int (* resume_io) (IPC_Channel *ch);/* * IPC_OPS::get_send_select_fd() * return a file descriptor which can be given to select/poll. This fd * is used by the IPC code for sending. It is intended that this be * ONLY used with select, poll, or similar mechanisms, not for direct I/O. * Note that due to select(2) and poll(2) semantics, you must check * is_sending_blocked() to see whether you should include this FD in * your poll for writability, or you will loop very fast in your * select/poll loop ;-) * * Parameters: * ch (IN) : the pointer to the channel. * * Return values: * integer >= 0 : the send fd for selection. * -1 : there is no send fd. * * See also: * is_sending_blocked() */ int (* get_send_select_fd) (IPC_Channel * ch);/* * IPC_OPS::get_recv_select_fd * return a file descriptor which can be given to select. This fd * is for receiving. It is intended that this be ONLY used with select, * poll, or similar mechanisms, NOT for direct I/O. * * Parameters: * ch (IN) : the pointer to the channel. * * Return values: * integer >= 0 : the recv fd for selection. * -1 : there is no recv fd. * * NOTE: This file descriptor is often the same as the send * file descriptor. */ int (* get_recv_select_fd) (IPC_Channel * ch);/* * IPC_OPS::set_send_qlen * allow user to set the maximum send_queue length. * * Parameters * ch (IN) : the pointer to the channel. * q_len (IN) : the max length for the send_queue. * * Return values: * IPC_OK : set the send queue length successfully. * IPC_FAIL : there is no send queue. (This isn't supposed * to happen). * It means something bad happened. * */ int (* set_send_qlen) (IPC_Channel * ch, int q_len);/* * IPC_OPS::set_recv_qlen * allow user to set the maximum recv_queue length. * * Parameters: * ch (IN) : the pointer to the channel. * q_len (IN) : the max length for the recv_queue. * * Return values: * IPC_OK : set the recv queue length successfully. * IPC_FAIL : there is no recv queue. * */ int (* set_recv_qlen) (IPC_Channel * ch, int q_len);};/* * ipc_wait_conn_constructor: * the common constructor for ipc waiting connection. * Use ch_type to identify the connection type. Usually it's only * needed by server side. * * Parameters: * ch_type (IN) : the type of the waiting connection to create. * ch_attrs (IN) : the hash table which contains the attributes * needed by this waiting connection in name/value * pair format. * * For example, the only attribute needed by UNIX * domain sockets is path name. * * Return values: * the pointer to a new waiting connection or NULL if the connection * can't be created. * Note: * current implementation only supports unix domain socket * whose type is IPC_DOMAIN_SOCKET * */extern IPC_WaitConnection * ipc_wait_conn_constructor(const char * ch_type, GHashTable* ch_attrs);/* * ipc_channel_constructor: * brief the common constructor for ipc channel. * Use ch_type to identify the channel type. * Usually this function is only called by client side. * * Parameters: * ch_type (IN): the type of the channel you want to create. * ch_attrs (IN): the hash table which contains the attributes needed * by this channel. * For example, the only attribute needed by UNIX domain * socket is path name. * * Return values: * the pointer to the new channel whose status is IPC_DISCONNECT * or NULL if the channel can't be created. * * Note: * current implementation only support unix domain socket * whose type is IPC_DOMAIN_SOCKET * */extern IPC_Channel * ipc_channel_constructor(const char * ch_type, GHashTable* ch_attrs);/* * ipc_channel_pair: * Construct a pair of connected IPC channels in a fashion analogous * to pipe(2) or socketpair(2). * * Parameters: * channels: an array of two IPC_Channel pointers for return result */int ipc_channel_pair(IPC_Channel* channels[2]);/* * ipc_set_auth: * A helper function used to convert array of uid and gid into * an authentication structure (IPC_Auth) * * Parameters: * a_uid (IN): the array of a set of user ids. * a_gid (IN): the array of a set of group ids. * num_uid (IN): the number of user ids. * num_gid (IN): the number of group ids. * * Return values: * the pointer to the authentication structure which contains the * set of uid and the set of gid. Or NULL if this structure can't * be created. * */extern IPC_Auth * ipc_set_auth(uid_t * a_uid, gid_t * a_gid, int num_uid, int num_gid);/* Destroys an object constructed by ipc_set_auth */extern void ipc_destroy_auth(IPC_Auth * auth);extern void ipc_set_pollfunc(int (*)(struct pollfd*, unsigned int, int));#define IPC_PATH_ATTR "path" /* pathname attribute */#define IPC_DOMAIN_SOCKET "uds" /* Unix domain socket */#define IPC_MODE_ATTR "sockmode" /* socket mode attribute */#ifdef IPC_DOMAIN_SOCKET# define IPC_ANYTYPE IPC_DOMAIN_SOCKET#else# error "No IPC types defined(!)"#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -