CT_EVENT_READ(3CONTRACT)               Contract Management Library Functions
NAME
       ct_event_read, ct_event_read_critical, ct_event_reset,
       ct_event_reliable, ct_event_free, ct_event_get_flags,
       ct_event_get_ctid, ct_event_get_evid, ct_event_get_type,
       ct_event_get_nevid, ct_event_get_newct - common contract event
       functions
SYNOPSIS
       cc [ 
flag... ] 
file... 
-D_LARGEFILE64_SOURCE  -lcontract  [ 
library... ]
       #include <libcontract.h>       
int ct_event_read(
int fd, 
ct_evthdl_t *evthndlp);       
int ct_event_read_critical(
int fd, 
ct_evthdl_t *evthndlp);       
int ct_event_reset(
int fd);       
int ct_event_reliable(
int fd);       
void ct_event_free(
ct_evthdl_t evthndl);       
ctid_t ct_event_get_ctid(
ct_evthdl_t evthndl);       
ctevid_t ct_event_get_evid(
ct_evthdl_t evthndl);       
uint_t ct_event_get_flags(
ct_evthdl_t evthndl);       
uint_t ct_event_get_type(
ct_evthdl_t evthndl);       
int ct_event_get_nevid(
ct_evthdl_t evthndl, 
ctevid_t *evidp);       
int ct_event_get_newct(
ct_evthdl_t evthndl, 
ctid_t *ctidp);
DESCRIPTION
       These functions operate on contract event endpoint file descriptors
       obtained from the 
contract(5) file system and event object handles
       returned by 
ct_event_read() and 
ct_event_read_critical().
       The 
ct_event_read() function reads the next event from the queue
       referenced by the file descriptor 
fd and initializes the event object
       handle pointed to by 
evthndlp. After a successful call to       
ct_event_read(), the caller is responsible for calling       
ct_event_free() on this event object handle when it has finished
       using it.
       The 
ct_event_read_critical() function behaves like 
ct_event_read()       except that it reads the next critical event from the queue, skipping
       any intermediate events.
       The 
ct_event_reset() function resets the location of the listener to
       the beginning of the queue. This function can be used to re-read
       events, or read events that were sent before the event endpoint was
       opened. Informative and acknowledged critical events, however, might
       have been removed from the queue.
       The 
ct_event_reliable() function indicates that no event published to
       the specified event queue should be dropped by the system until the
       specified listener has read the event. This function requires that
       the caller have the {
PRIV_CONTRACT_EVENT} privilege in its effective
       set.
       The 
ct_event_free() function frees any storage associated with the
       event object handle specified by 
evthndl.
       The 
ct_event_get_ctid() function returns the ID of the contract that
       sent the specified event.
       The 
ct_event_get_evid() function returns the ID of the specified
       event.
       The 
ct_event_get_flags() function returns the event flags for the
       specified event. Valid event flags are:       
CTE_INFO                   The event is an informative event.       
CTE_ACK                   The event has been acknowledged (for critical and
                   negotiation messages).       
CTE_NEG                   The message represents an exit negotiation.
       The 
ct_event_get_type() function reads the event type. The value is
       one of the event types described in 
contract(5) or the contract
       type's manual page.
        The 
ct_event_get_nevid() function reads the negotiation ID from an       
CT_EV_NEGEND event.
       The 
ct_event_get_newct() function obtains the ID of the contract
       created when the negotiation referenced by the 
CT_EV_NEGEND event
       succeeded. If no contract was created, 
ctidp will be 0.  If the
       operation was cancelled, *
ctidp will equal the ID of the existing
       contract.
RETURN VALUES
       Upon successful completion, 
ct_event_read(),       
ct_event_read_critical(), 
ct_event_reset(), 
ct_event_reliable(),       
ct_event_get_nevid(), and 
ct_event_get_newct() return 0. Otherwise,
       they return a non-zero error value.
       The 
ct_event_get_flags(), 
ct_event_get_ctid(), 
ct_event_get_evid(),
       and 
ct_event_get_type() functions return data as described in the
       DESCRIPTION.
ERRORS
       The 
ct_event_reliable() function will fail if:       
EPERM                The caller does not have {
PRIV_CONTRACT_EVENT} in its
                effective set.
       The 
ct_event_read() and 
ct_event_read_critical() functions will fail
       if:       
EAGAIN                 The event endpoint was opened 
O_NONBLOCK and no applicable
                 events were available to be read.
       The 
ct_event_get_nevid() and 
ct_event_get_newct() functions will fail
       if:       
EINVAL                 The 
evthndl argument is not a 
CT_EV_NEGEND event object.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Evolving        |
       +--------------------+-----------------+
       |MT-Level            | Safe            |
       +--------------------+-----------------+
SEE ALSO
       libcontract(3LIB), 
contract(5), 
attributes(7), 
lfcompile(7)                                April 9, 2016       CT_EVENT_READ(3CONTRACT)