C AMQP Protocol Engine API  0.7
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Selectable

Typedefs

typedef pn_iterator_t pn_selectables_t
 
typedef struct pn_selectable_t pn_selectable_t
 

Functions

PN_EXTERN pn_selectables_tpn_selectables (void)
 
PN_EXTERN pn_selectable_tpn_selectables_next (pn_selectables_t *selectables)
 
PN_EXTERN void pn_selectables_free (pn_selectables_t *selectables)
 
PN_EXTERN pn_socket_t pn_selectable_fd (pn_selectable_t *selectable)
 
PN_EXTERN ssize_t pn_selectable_capacity (pn_selectable_t *selectable)
 
PN_EXTERN ssize_t pn_selectable_pending (pn_selectable_t *selectable)
 
PN_EXTERN pn_timestamp_t pn_selectable_deadline (pn_selectable_t *selectable)
 
PN_EXTERN void pn_selectable_readable (pn_selectable_t *selectable)
 
PN_EXTERN void pn_selectable_writable (pn_selectable_t *selectable)
 
PN_EXTERN void pn_selectable_expired (pn_selectable_t *selectable)
 
PN_EXTERN bool pn_selectable_is_registered (pn_selectable_t *selectable)
 
PN_EXTERN void pn_selectable_set_registered (pn_selectable_t *selectable, bool registered)
 
PN_EXTERN bool pn_selectable_is_terminal (pn_selectable_t *selectable)
 
PN_EXTERN void pn_selectable_free (pn_selectable_t *selectable)
 

Detailed Description

Typedef Documentation

A selectable object provides an interface that can be used to incorporate proton's I/O into third party event loops.

Every selectable is associated with exactly one file descriptor. Selectables may be interested in three kinds of events, read events, write events, and timer events. A selectable will express its interest in these events through the pn_selectable_capacity(), pn_selectable_pending(), and pn_selectable_deadline() calls.

When a read, write, or timer event occurs, the selectable must be notified by calling pn_selectable_readable(), pn_selectable_writable(), and pn_selectable_expired() as appropriate.

Once a selectable reaches a terminal state (see pn_selectable_is_terminal()), it will never be interested in events of any kind. When this occurs it should be removed from the external event loop and discarded using pn_selectable_free().

An iterator for selectables.

Function Documentation

PN_EXTERN ssize_t pn_selectable_capacity ( pn_selectable_t selectable)

Get the capacity of a selectable.

A selectable with a positive capacity is interested in being notified of read events. A negative capacity indicates that the selectable will never be interested in read events ever again.

Parameters
[in]selectablea selectable object
Returns
the selectables capacity
PN_EXTERN pn_timestamp_t pn_selectable_deadline ( pn_selectable_t selectable)

Get the next deadline for a selectable.

A selectable with a deadline is interested in being notified when that deadline expires. Zero indicates there is currently no deadline.

Parameters
[in]selectablea selectable object
Returns
the next deadline or zero
PN_EXTERN void pn_selectable_expired ( pn_selectable_t selectable)

Notify a selectable that its deadline has expired.

Parameters
[in]selectablea selectable object
PN_EXTERN pn_socket_t pn_selectable_fd ( pn_selectable_t selectable)

Get the file descriptor associated with a selectable.

Parameters
[in]selectablea selectable object
Returns
the file descriptor associated with the selectable
PN_EXTERN void pn_selectable_free ( pn_selectable_t selectable)

Free a selectable object.

Parameters
[in]selectablea selectable object (or NULL)
PN_EXTERN bool pn_selectable_is_registered ( pn_selectable_t selectable)

Check if a selectable is registered.

This flag is set via pn_selectable_set_registered() and can be used for tracking whether a given selectable has been registerd with an external event loop.

Parameters
[in]selectable
Returns
true if the selectable is registered
PN_EXTERN bool pn_selectable_is_terminal ( pn_selectable_t selectable)

Check if a selectable is in the terminal state.

A selectable that is in the terminal state will never be interested in being notified of events of any kind ever again. Once a selectable reaches this state it should be removed from any external I/O loops and freed in order to reclaim any resources associated with it.

Parameters
[in]selectablea selectable object
Returns
true if the selectable is in the terminal state, false otherwise
PN_EXTERN ssize_t pn_selectable_pending ( pn_selectable_t selectable)

Get the number of bytes pending for a selectable.

A selectable with pending bytes is interested in being notified of write events. If this value is negative then the selectable will never be interested in write events ever again.

Parameters
[in]selectablea selectable object
Returns
the number of bytes pending for the selectable
PN_EXTERN void pn_selectable_readable ( pn_selectable_t selectable)

Notify a selectable that the file descriptor is readable.

Parameters
[in]selectablea selectable object
PN_EXTERN void pn_selectable_set_registered ( pn_selectable_t selectable,
bool  registered 
)

Set the registered flag for a selectable.

See pn_selectable_is_registered() for details.

Parameters
[in]selectablea selectable object
[in]registeredthe registered flag
PN_EXTERN void pn_selectable_writable ( pn_selectable_t selectable)

Notify a selectable that the file descriptor is writable.

Parameters
[in]selectablea selectable object
PN_EXTERN pn_selectables_t* pn_selectables ( void  )

Construct a new selectables iterator.

Returns
a pointer to a new selectables iterator
PN_EXTERN void pn_selectables_free ( pn_selectables_t selectables)

Free a selectables iterator.

Parameters
[in]selectablesa selectables iterator (or NULL)
PN_EXTERN pn_selectable_t* pn_selectables_next ( pn_selectables_t selectables)

Get the next selectable from an iterator.

Parameters
[in]selectablesa selectable iterator
Returns
the next selectable from the iterator