You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by jr...@apache.org on 2017/08/30 03:12:45 UTC
[26/51] [partial] qpid-site git commit: QPID-7903: Publish a snapshot
of the Proton C docs
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/36c59045/content/releases/qpid-proton-master/proton/c/api/group__proactor.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-master/proton/c/api/group__proactor.html b/content/releases/qpid-proton-master/proton/c/api/group__proactor.html
index 167e42b..82e29e4 100755
--- a/content/releases/qpid-proton-master/proton/c/api/group__proactor.html
+++ b/content/releases/qpid-proton-master/proton/c/api/group__proactor.html
@@ -3,7 +3,8 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Qpid Proton C API: Proactor</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
@@ -14,7 +15,6 @@
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
- $(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
@@ -55,7 +55,7 @@
</table>
</div>
<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
+<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
@@ -90,151 +90,269 @@ $(document).ready(function(){initNavTree('group__proactor.html','');});
<div class="header">
<div class="summary">
+<a href="#groups">Modules</a> |
+<a href="#define-members">Macros</a> |
<a href="#typedef-members">Typedefs</a> |
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
-<div class="title">Proactor<div class="ingroups"><a class="el" href="group__io.html">IO</a></div></div> </div>
+<div class="title">Proactor</div> </div>
</div><!--header-->
<div class="contents">
<p><b>Experimental</b> - Multithreaded IO
<a href="#details">More...</a></p>
<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__listener"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__listener.html">Listener</a></td></tr>
+<tr class="memdesc:group__listener"><td class="mdescLeft"> </td><td class="mdescRight"><b>Experimental</b> - A listener for incoming connections for the <a class="el" href="group__proactor.html">Proactor</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:group__proactor__events"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor__events.html">Events</a></td></tr>
+<tr class="memdesc:group__proactor__events"><td class="mdescLeft"> </td><td class="mdescRight"><b>Experimental</b> - Events returned by <a class="el" href="group__proactor.html#ga2b66a46f3e557010ec61bd105326753d" title="Wait until there are Events to handle. ">pn_proactor_wait()</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga29ae114b42fb797c103dc9883ebcb256"><td class="memItemLeft" align="right" valign="top"><a id="ga29ae114b42fb797c103dc9883ebcb256"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga29ae114b42fb797c103dc9883ebcb256">PN_MAX_ADDR</a></td></tr>
+<tr class="memdesc:ga29ae114b42fb797c103dc9883ebcb256"><td class="mdescLeft"> </td><td class="mdescRight">Size of buffer that can hold the largest connection or listening address. <br /></td></tr>
+<tr class="separator:ga29ae114b42fb797c103dc9883ebcb256"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
-<tr class="memitem:ga68ac7072ae60612d0bca5470014bf216"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga68ac7072ae60612d0bca5470014bf216"></a>
-typedef struct <a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a></td></tr>
-<tr class="memdesc:ga68ac7072ae60612d0bca5470014bf216"><td class="mdescLeft"> </td><td class="mdescRight">A listener accepts connections. <br /></td></tr>
-<tr class="separator:ga68ac7072ae60612d0bca5470014bf216"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gabba42c7929dfceb9d296535bad0c93dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabba42c7929dfceb9d296535bad0c93dc"></a>
-typedef struct <a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a></td></tr>
-<tr class="memdesc:gabba42c7929dfceb9d296535bad0c93dc"><td class="mdescLeft"> </td><td class="mdescRight">The proactor, see <a class="el" href="group__proactor.html#ga9d77772be7805709c87eeb01b06d67e2" title="Create a proactor. ">pn_proactor()</a> <br /></td></tr>
-<tr class="separator:gabba42c7929dfceb9d296535bad0c93dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga79d820cd3ad391cc5207c83dbb373a9c"><td class="memItemLeft" align="right" valign="top"><a id="ga79d820cd3ad391cc5207c83dbb373a9c"></a>
+typedef struct <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a></td></tr>
+<tr class="memdesc:ga79d820cd3ad391cc5207c83dbb373a9c"><td class="mdescLeft"> </td><td class="mdescRight">Network address of a proactor transport. <br /></td></tr>
+<tr class="separator:ga79d820cd3ad391cc5207c83dbb373a9c"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
-<tr class="memitem:gaaaf34821f3d29274ec41e7ce71022540"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gaaaf34821f3d29274ec41e7ce71022540">pn_listener</a> (void)</td></tr>
-<tr class="memdesc:gaaaf34821f3d29274ec41e7ce71022540"><td class="mdescLeft"> </td><td class="mdescRight">Create a listener. <a href="#gaaaf34821f3d29274ec41e7ce71022540">More...</a><br /></td></tr>
-<tr class="separator:gaaaf34821f3d29274ec41e7ce71022540"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga76bcf4efdfa82fff28318e1afad083dc"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga76bcf4efdfa82fff28318e1afad083dc">pn_listener_accept</a> (<a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> *, <a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> *connection)</td></tr>
-<tr class="memdesc:ga76bcf4efdfa82fff28318e1afad083dc"><td class="mdescLeft"> </td><td class="mdescRight">Asynchronously accept a connection using the listener. <a href="#ga76bcf4efdfa82fff28318e1afad083dc">More...</a><br /></td></tr>
-<tr class="separator:ga76bcf4efdfa82fff28318e1afad083dc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga6dba0fded7ca1718397151c62e65535b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6dba0fded7ca1718397151c62e65535b"></a>
-<a class="el" href="group__condition.html#ga11eb7db7d2c205169fe3d47c996a95a5">pn_condition_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga6dba0fded7ca1718397151c62e65535b">pn_listener_condition</a> (<a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> *l)</td></tr>
-<tr class="memdesc:ga6dba0fded7ca1718397151c62e65535b"><td class="mdescLeft"> </td><td class="mdescRight">Get the error condition for a listener. <br /></td></tr>
-<tr class="separator:ga6dba0fded7ca1718397151c62e65535b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga471e37ae503bf6b2635b7f5f5c2d88bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga471e37ae503bf6b2635b7f5f5c2d88bf"></a>
-pn_record_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga471e37ae503bf6b2635b7f5f5c2d88bf">pn_listener_attachments</a> (<a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> *listener)</td></tr>
-<tr class="memdesc:ga471e37ae503bf6b2635b7f5f5c2d88bf"><td class="mdescLeft"> </td><td class="mdescRight">Get the attachments that are associated with a listener object. <br /></td></tr>
-<tr class="separator:ga471e37ae503bf6b2635b7f5f5c2d88bf"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga5690239e2a4f97e3ebbccb25fde75d81"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5690239e2a4f97e3ebbccb25fde75d81"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga5690239e2a4f97e3ebbccb25fde75d81">pn_listener_close</a> (<a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> *l)</td></tr>
-<tr class="memdesc:ga5690239e2a4f97e3ebbccb25fde75d81"><td class="mdescLeft"> </td><td class="mdescRight">Close the listener (thread safe). <br /></td></tr>
-<tr class="separator:ga5690239e2a4f97e3ebbccb25fde75d81"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga491561209bfe8934141015c1dd922a4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga491561209bfe8934141015c1dd922a4f"></a>
-<a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga491561209bfe8934141015c1dd922a4f">pn_listener_proactor</a> (<a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> *c)</td></tr>
-<tr class="memdesc:ga491561209bfe8934141015c1dd922a4f"><td class="mdescLeft"> </td><td class="mdescRight">The proactor associated with a listener. <br /></td></tr>
-<tr class="separator:ga491561209bfe8934141015c1dd922a4f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga9d77772be7805709c87eeb01b06d67e2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga9d77772be7805709c87eeb01b06d67e2">pn_proactor</a> (void)</td></tr>
-<tr class="memdesc:ga9d77772be7805709c87eeb01b06d67e2"><td class="mdescLeft"> </td><td class="mdescRight">Create a proactor. <a href="#ga9d77772be7805709c87eeb01b06d67e2">More...</a><br /></td></tr>
-<tr class="separator:ga9d77772be7805709c87eeb01b06d67e2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga10fa443c109cee057a3c30e69f93fcef"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga10fa443c109cee057a3c30e69f93fcef">pn_proactor_free</a> (<a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor)</td></tr>
-<tr class="memdesc:ga10fa443c109cee057a3c30e69f93fcef"><td class="mdescLeft"> </td><td class="mdescRight">Free the proactor. <a href="#ga10fa443c109cee057a3c30e69f93fcef">More...</a><br /></td></tr>
-<tr class="separator:ga10fa443c109cee057a3c30e69f93fcef"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga523ea983380a1566b3b1a7606d66422c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga523ea983380a1566b3b1a7606d66422c">pn_proactor_connect</a> (<a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor, <a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> *connection, const char *host, const char *port)</td></tr>
-<tr class="memdesc:ga523ea983380a1566b3b1a7606d66422c"><td class="mdescLeft"> </td><td class="mdescRight">Connect connection to host/port. <a href="#ga523ea983380a1566b3b1a7606d66422c">More...</a><br /></td></tr>
-<tr class="separator:ga523ea983380a1566b3b1a7606d66422c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga68300a70c58a825564d5b4ee5d147696"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga68300a70c58a825564d5b4ee5d147696">pn_proactor_listen</a> (<a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor, <a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> *listener, const char *host, const char *port, int backlog)</td></tr>
-<tr class="memdesc:ga68300a70c58a825564d5b4ee5d147696"><td class="mdescLeft"> </td><td class="mdescRight">Start listening with listener. <a href="#ga68300a70c58a825564d5b4ee5d147696">More...</a><br /></td></tr>
-<tr class="separator:ga68300a70c58a825564d5b4ee5d147696"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga56f5830965c20d3dbfc63e795eb243c4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__event.html#ga6bc581dfeaa8e8d46d07d37229d565c9">pn_event_batch_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga56f5830965c20d3dbfc63e795eb243c4">pn_proactor_wait</a> (<a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor)</td></tr>
-<tr class="memdesc:ga56f5830965c20d3dbfc63e795eb243c4"><td class="mdescLeft"> </td><td class="mdescRight">Wait for events to handle. <a href="#ga56f5830965c20d3dbfc63e795eb243c4">More...</a><br /></td></tr>
-<tr class="separator:ga56f5830965c20d3dbfc63e795eb243c4"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gab45680de5c02690a1f1ad1a3c70e9d65"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gab45680de5c02690a1f1ad1a3c70e9d65">pn_proactor_done</a> (<a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor, <a class="el" href="group__event.html#ga6bc581dfeaa8e8d46d07d37229d565c9">pn_event_batch_t</a> *events)</td></tr>
-<tr class="memdesc:gab45680de5c02690a1f1ad1a3c70e9d65"><td class="mdescLeft"> </td><td class="mdescRight">Call when done handling a batch of events. <a href="#gab45680de5c02690a1f1ad1a3c70e9d65">More...</a><br /></td></tr>
-<tr class="separator:gab45680de5c02690a1f1ad1a3c70e9d65"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gaff37a5b9d3d822ad9a961dae5155ebdb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gaff37a5b9d3d822ad9a961dae5155ebdb">pn_proactor_interrupt</a> (<a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor)</td></tr>
-<tr class="memdesc:gaff37a5b9d3d822ad9a961dae5155ebdb"><td class="mdescLeft"> </td><td class="mdescRight">Cause PN_PROACTOR_INTERRUPT to be returned to exactly one call of <a class="el" href="group__proactor.html#ga56f5830965c20d3dbfc63e795eb243c4" title="Wait for events to handle. ">pn_proactor_wait()</a>. <a href="#gaff37a5b9d3d822ad9a961dae5155ebdb">More...</a><br /></td></tr>
-<tr class="separator:gaff37a5b9d3d822ad9a961dae5155ebdb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga8428d00193008841e529aae6a922fa5f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga8428d00193008841e529aae6a922fa5f">pn_proactor_set_timeout</a> (<a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor, <a class="el" href="group__api__types.html#ga9a701bc6dc9af9f42c3f4679172a723c">pn_millis_t</a> timeout)</td></tr>
-<tr class="memdesc:ga8428d00193008841e529aae6a922fa5f"><td class="mdescLeft"> </td><td class="mdescRight">Cause PN_PROACTOR_TIMEOUT to be returned to a thread calling wait() after timeout milliseconds. <a href="#ga8428d00193008841e529aae6a922fa5f">More...</a><br /></td></tr>
-<tr class="separator:ga8428d00193008841e529aae6a922fa5f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga2e5c9fddae8d7aa07fc93438c5ae2d86"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga2e5c9fddae8d7aa07fc93438c5ae2d86">pn_connection_wake</a> (<a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> *connection)</td></tr>
-<tr class="memdesc:ga2e5c9fddae8d7aa07fc93438c5ae2d86"><td class="mdescLeft"> </td><td class="mdescRight">Cause a PN_CONNECTION_WAKE event to be returned by the proactor, even if there are no IO events pending for the connection. <a href="#ga2e5c9fddae8d7aa07fc93438c5ae2d86">More...</a><br /></td></tr>
-<tr class="separator:ga2e5c9fddae8d7aa07fc93438c5ae2d86"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga0daf3895a13049783ab1dc40f3ac46b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0daf3895a13049783ab1dc40f3ac46b8"></a>
-<a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga0daf3895a13049783ab1dc40f3ac46b8">pn_connection_proactor</a> (<a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> *connection)</td></tr>
-<tr class="memdesc:ga0daf3895a13049783ab1dc40f3ac46b8"><td class="mdescLeft"> </td><td class="mdescRight">Return the proactor associated with a connection or NULL. <br /></td></tr>
-<tr class="separator:ga0daf3895a13049783ab1dc40f3ac46b8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ga01e9b1cf8e0ff18cd4a2d6ed0e73a25a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga01e9b1cf8e0ff18cd4a2d6ed0e73a25a"></a>
-<a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga01e9b1cf8e0ff18cd4a2d6ed0e73a25a">pn_event_proactor</a> (<a class="el" href="group__event.html#ga87f3028b4888632bbd56fb71ac737ae8">pn_event_t</a> *event)</td></tr>
-<tr class="memdesc:ga01e9b1cf8e0ff18cd4a2d6ed0e73a25a"><td class="mdescLeft"> </td><td class="mdescRight">Return the proactor associated with an event or NULL. <br /></td></tr>
-<tr class="separator:ga01e9b1cf8e0ff18cd4a2d6ed0e73a25a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:gad9ea34f659b8bd2d0089fb43fa468300"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad9ea34f659b8bd2d0089fb43fa468300"></a>
-<a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gad9ea34f659b8bd2d0089fb43fa468300">pn_event_listener</a> (<a class="el" href="group__event.html#ga87f3028b4888632bbd56fb71ac737ae8">pn_event_t</a> *event)</td></tr>
-<tr class="memdesc:gad9ea34f659b8bd2d0089fb43fa468300"><td class="mdescLeft"> </td><td class="mdescRight">Return the listener associated with an event or NULL. <br /></td></tr>
-<tr class="separator:gad9ea34f659b8bd2d0089fb43fa468300"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f6a27999303c6082edc581f880de37c"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga9f6a27999303c6082edc581f880de37c">pn_netaddr_str</a> (const <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a> *addr, char *buf, size_t size)</td></tr>
+<tr class="memdesc:ga9f6a27999303c6082edc581f880de37c"><td class="mdescLeft"> </td><td class="mdescRight">Format a network address as a human-readable string in buf. <a href="#ga9f6a27999303c6082edc581f880de37c">More...</a><br /></td></tr>
+<tr class="separator:ga9f6a27999303c6082edc581f880de37c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7edab5e295c55e1c2169e39aaa082f8b"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN const <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga7edab5e295c55e1c2169e39aaa082f8b">pn_netaddr_local</a> (<a class="el" href="group__transport.html#gac26eda05f649bbf0399f3d8d78d12fa8">pn_transport_t</a> *t)</td></tr>
+<tr class="memdesc:ga7edab5e295c55e1c2169e39aaa082f8b"><td class="mdescLeft"> </td><td class="mdescRight">Get the local address of a transport. <a href="#ga7edab5e295c55e1c2169e39aaa082f8b">More...</a><br /></td></tr>
+<tr class="separator:ga7edab5e295c55e1c2169e39aaa082f8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga59fa5ba7adc39bc8549645d5d33082c0"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN const <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga59fa5ba7adc39bc8549645d5d33082c0">pn_netaddr_remote</a> (<a class="el" href="group__transport.html#gac26eda05f649bbf0399f3d8d78d12fa8">pn_transport_t</a> *t)</td></tr>
+<tr class="memdesc:ga59fa5ba7adc39bc8549645d5d33082c0"><td class="mdescLeft"> </td><td class="mdescRight">Get the remote address of a transport. <a href="#ga59fa5ba7adc39bc8549645d5d33082c0">More...</a><br /></td></tr>
+<tr class="separator:ga59fa5ba7adc39bc8549645d5d33082c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga00b1a40af2d837915d21cdb52ccb0c58"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN const struct sockaddr * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga00b1a40af2d837915d21cdb52ccb0c58">pn_netaddr_sockaddr</a> (const <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a> *na)</td></tr>
+<tr class="memdesc:ga00b1a40af2d837915d21cdb52ccb0c58"><td class="mdescLeft"> </td><td class="mdescRight">On POSIX or Windows, get the underlying <code>struct sockaddr</code>. <a href="#ga00b1a40af2d837915d21cdb52ccb0c58">More...</a><br /></td></tr>
+<tr class="separator:ga00b1a40af2d837915d21cdb52ccb0c58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaddaf2b0b3e107d100e4c3658116a6c3c"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gaddaf2b0b3e107d100e4c3658116a6c3c">pn_netaddr_socklen</a> (const <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a> *na)</td></tr>
+<tr class="memdesc:gaddaf2b0b3e107d100e4c3658116a6c3c"><td class="mdescLeft"> </td><td class="mdescRight">On POSIX or Windows, get the size of the underlying <code>struct sockaddr</code>. <a href="#gaddaf2b0b3e107d100e4c3658116a6c3c">More...</a><br /></td></tr>
+<tr class="separator:gaddaf2b0b3e107d100e4c3658116a6c3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf67a7642c9003b36255b58776b494c96"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gaf67a7642c9003b36255b58776b494c96">pn_proactor_addr</a> (char *addr, size_t size, const char *host, const char *port)</td></tr>
+<tr class="memdesc:gaf67a7642c9003b36255b58776b494c96"><td class="mdescLeft"> </td><td class="mdescRight">Format a host:port address string for <a class="el" href="group__proactor.html#ga9a9d1c4138226fa87160f4769b87f8e6" title="Bind connection to a new Transport connected to addr. ">pn_proactor_connect()</a> or <a class="el" href="group__proactor.html#gacbed6a4ab75ef8452c10d52e4cd62752" title="Start listening for incoming connections. ">pn_proactor_listen()</a> <a href="#gaf67a7642c9003b36255b58776b494c96">More...</a><br /></td></tr>
+<tr class="separator:gaf67a7642c9003b36255b58776b494c96"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac2a925b3de00efd8cd40fa9920169554"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN <a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gac2a925b3de00efd8cd40fa9920169554">pn_proactor</a> (void)</td></tr>
+<tr class="memdesc:gac2a925b3de00efd8cd40fa9920169554"><td class="mdescLeft"> </td><td class="mdescRight">Create a proactor. <a href="#gac2a925b3de00efd8cd40fa9920169554">More...</a><br /></td></tr>
+<tr class="separator:gac2a925b3de00efd8cd40fa9920169554"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5260c2653d4af5eb2f1c8c6190e9d6cf"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga5260c2653d4af5eb2f1c8c6190e9d6cf">pn_proactor_free</a> (<a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor)</td></tr>
+<tr class="memdesc:ga5260c2653d4af5eb2f1c8c6190e9d6cf"><td class="mdescLeft"> </td><td class="mdescRight">Free the proactor. <a href="#ga5260c2653d4af5eb2f1c8c6190e9d6cf">More...</a><br /></td></tr>
+<tr class="separator:ga5260c2653d4af5eb2f1c8c6190e9d6cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a9d1c4138226fa87160f4769b87f8e6"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga9a9d1c4138226fa87160f4769b87f8e6">pn_proactor_connect</a> (<a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor, <a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> *connection, const char *addr)</td></tr>
+<tr class="memdesc:ga9a9d1c4138226fa87160f4769b87f8e6"><td class="mdescLeft"> </td><td class="mdescRight">Bind <code>connection</code> to a new <a class="el" href="group__transport.html">Transport</a> connected to <code>addr</code>. <a href="#ga9a9d1c4138226fa87160f4769b87f8e6">More...</a><br /></td></tr>
+<tr class="separator:ga9a9d1c4138226fa87160f4769b87f8e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacbed6a4ab75ef8452c10d52e4cd62752"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gacbed6a4ab75ef8452c10d52e4cd62752">pn_proactor_listen</a> (<a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor, <a class="el" href="group__listener.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> *listener, const char *addr, int backlog)</td></tr>
+<tr class="memdesc:gacbed6a4ab75ef8452c10d52e4cd62752"><td class="mdescLeft"> </td><td class="mdescRight">Start listening for incoming connections. <a href="#gacbed6a4ab75ef8452c10d52e4cd62752">More...</a><br /></td></tr>
+<tr class="separator:gacbed6a4ab75ef8452c10d52e4cd62752"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac600bd88ed0fc6c2b66bed4a8740bd68"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gac600bd88ed0fc6c2b66bed4a8740bd68">pn_proactor_disconnect</a> (<a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor, <a class="el" href="group__condition.html#ga11eb7db7d2c205169fe3d47c996a95a5">pn_condition_t</a> *condition)</td></tr>
+<tr class="memdesc:gac600bd88ed0fc6c2b66bed4a8740bd68"><td class="mdescLeft"> </td><td class="mdescRight">Disconnect all connections and listeners belonging to the proactor. <a href="#gac600bd88ed0fc6c2b66bed4a8740bd68">More...</a><br /></td></tr>
+<tr class="separator:gac600bd88ed0fc6c2b66bed4a8740bd68"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2b66a46f3e557010ec61bd105326753d"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN <a class="el" href="group__event.html#ga6bc581dfeaa8e8d46d07d37229d565c9">pn_event_batch_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga2b66a46f3e557010ec61bd105326753d">pn_proactor_wait</a> (<a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor)</td></tr>
+<tr class="memdesc:ga2b66a46f3e557010ec61bd105326753d"><td class="mdescLeft"> </td><td class="mdescRight">Wait until there are <a class="el" href="group__proactor__events.html">Events</a> to handle. <a href="#ga2b66a46f3e557010ec61bd105326753d">More...</a><br /></td></tr>
+<tr class="separator:ga2b66a46f3e557010ec61bd105326753d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga957eae24db6ec4962af79c5a06106115"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN <a class="el" href="group__event.html#ga6bc581dfeaa8e8d46d07d37229d565c9">pn_event_batch_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga957eae24db6ec4962af79c5a06106115">pn_proactor_get</a> (<a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor)</td></tr>
+<tr class="memdesc:ga957eae24db6ec4962af79c5a06106115"><td class="mdescLeft"> </td><td class="mdescRight">Return <a class="el" href="group__proactor__events.html">Events</a> if any are available immediately. <a href="#ga957eae24db6ec4962af79c5a06106115">More...</a><br /></td></tr>
+<tr class="separator:ga957eae24db6ec4962af79c5a06106115"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade60ff2292b74841766f953b906285c0"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gade60ff2292b74841766f953b906285c0">pn_proactor_done</a> (<a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor, <a class="el" href="group__event.html#ga6bc581dfeaa8e8d46d07d37229d565c9">pn_event_batch_t</a> *events)</td></tr>
+<tr class="memdesc:gade60ff2292b74841766f953b906285c0"><td class="mdescLeft"> </td><td class="mdescRight">Call when finished handling a batch of events. <a href="#gade60ff2292b74841766f953b906285c0">More...</a><br /></td></tr>
+<tr class="separator:gade60ff2292b74841766f953b906285c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa5255cd1bcb5d7f5639b53dc30712711"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gaa5255cd1bcb5d7f5639b53dc30712711">pn_proactor_interrupt</a> (<a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor)</td></tr>
+<tr class="memdesc:gaa5255cd1bcb5d7f5639b53dc30712711"><td class="mdescLeft"> </td><td class="mdescRight">Return a <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaaee05826a80e94b5b86c4544e4715f499">PN_PROACTOR_INTERRUPT</a> event as soon as possible. <a href="#gaa5255cd1bcb5d7f5639b53dc30712711">More...</a><br /></td></tr>
+<tr class="separator:gaa5255cd1bcb5d7f5639b53dc30712711"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad7cd71f06282eb290699d90c316b2d32"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gad7cd71f06282eb290699d90c316b2d32">pn_proactor_set_timeout</a> (<a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor, <a class="el" href="group__api__types.html#ga9a701bc6dc9af9f42c3f4679172a723c">pn_millis_t</a> timeout)</td></tr>
+<tr class="memdesc:gad7cd71f06282eb290699d90c316b2d32"><td class="mdescLeft"> </td><td class="mdescRight">Return a <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaa4afa8c2da61f4c665c669fbe37b1c5fe">PN_PROACTOR_TIMEOUT</a> after <code>timeout</code> milliseconds elapse. <a href="#gad7cd71f06282eb290699d90c316b2d32">More...</a><br /></td></tr>
+<tr class="separator:gad7cd71f06282eb290699d90c316b2d32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac206e4d0a1b7546d940a83cdd79ce93f"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gac206e4d0a1b7546d940a83cdd79ce93f">pn_proactor_cancel_timeout</a> (<a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> *proactor)</td></tr>
+<tr class="memdesc:gac206e4d0a1b7546d940a83cdd79ce93f"><td class="mdescLeft"> </td><td class="mdescRight">Cancel the pending timeout set by <a class="el" href="group__proactor.html#gad7cd71f06282eb290699d90c316b2d32" title="Return a PN_PROACTOR_TIMEOUT after timeout milliseconds elapse. ">pn_proactor_set_timeout()</a>. <a href="#gac206e4d0a1b7546d940a83cdd79ce93f">More...</a><br /></td></tr>
+<tr class="separator:gac206e4d0a1b7546d940a83cdd79ce93f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1950236260353f82729dbb4589ef6c27"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga1950236260353f82729dbb4589ef6c27">pn_proactor_release_connection</a> (<a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> *connection)</td></tr>
+<tr class="memdesc:ga1950236260353f82729dbb4589ef6c27"><td class="mdescLeft"> </td><td class="mdescRight">Release ownership of <code>connection</code>, disassociate it from its proactor. <a href="#ga1950236260353f82729dbb4589ef6c27">More...</a><br /></td></tr>
+<tr class="separator:ga1950236260353f82729dbb4589ef6c27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0f49c771fe3bff54f58c9d583ca30560"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga0f49c771fe3bff54f58c9d583ca30560">pn_connection_wake</a> (<a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> *connection)</td></tr>
+<tr class="memdesc:ga0f49c771fe3bff54f58c9d583ca30560"><td class="mdescLeft"> </td><td class="mdescRight">Return a <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaa28a2bfee806bbc1fe31499c8eec39db0">PN_CONNECTION_WAKE</a> event for <code>connection</code> as soon as possible. <a href="#ga0f49c771fe3bff54f58c9d583ca30560">More...</a><br /></td></tr>
+<tr class="separator:ga0f49c771fe3bff54f58c9d583ca30560"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4727a4e26f19efcff0d48960cbba2f40"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN <a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#ga4727a4e26f19efcff0d48960cbba2f40">pn_connection_proactor</a> (<a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> *connection)</td></tr>
+<tr class="memdesc:ga4727a4e26f19efcff0d48960cbba2f40"><td class="mdescLeft"> </td><td class="mdescRight">Return the proactor associated with a connection. <a href="#ga4727a4e26f19efcff0d48960cbba2f40">More...</a><br /></td></tr>
+<tr class="separator:ga4727a4e26f19efcff0d48960cbba2f40"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac412771217decd84bd70931acbd0828a"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN <a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gac412771217decd84bd70931acbd0828a">pn_event_proactor</a> (<a class="el" href="group__event.html#ga87f3028b4888632bbd56fb71ac737ae8">pn_event_t</a> *event)</td></tr>
+<tr class="memdesc:gac412771217decd84bd70931acbd0828a"><td class="mdescLeft"> </td><td class="mdescRight">Return the proactor associated with an event. <a href="#gac412771217decd84bd70931acbd0828a">More...</a><br /></td></tr>
+<tr class="separator:gac412771217decd84bd70931acbd0828a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad45b60b98f2bf385ee6ca5dca7b3f42d"><td class="memItemLeft" align="right" valign="top">PNP_EXTERN <a class="el" href="group__api__types.html#ga9a701bc6dc9af9f42c3f4679172a723c">pn_millis_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__proactor.html#gad45b60b98f2bf385ee6ca5dca7b3f42d">pn_proactor_now</a> (void)</td></tr>
+<tr class="memdesc:gad45b60b98f2bf385ee6ca5dca7b3f42d"><td class="mdescLeft"> </td><td class="mdescRight">Get the real elapsed time since an arbitrary point in the past in milliseconds. <a href="#gad45b60b98f2bf385ee6ca5dca7b3f42d">More...</a><br /></td></tr>
+<tr class="separator:gad45b60b98f2bf385ee6ca5dca7b3f42d"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p><b>Experimental</b> - Multithreaded IO </p>
+<p>The proactor associates an abstract AMQP protocol <a class="el" href="group__connection.html">Connection</a> with a concrete IO <a class="el" href="group__transport.html">Transport</a> implementation for outgoing and incoming connections.</p>
+<p><a class="el" href="group__proactor.html#ga2b66a46f3e557010ec61bd105326753d" title="Wait until there are Events to handle. ">pn_proactor_wait()</a> returns <a class="el" href="group__proactor__events.html">Events</a> to application threads for handling.</p>
+<p>The <a class="el" href="group__proactor.html#gac2a925b3de00efd8cd40fa9920169554">pn_proactor</a>* functions are thread-safe, but to handle <a class="el" href="group__proactor__events.html">Events</a> you must also use the <a class="el" href="group__core.html">Core</a> APIs which are not. <a class="el" href="group__core.html">Core</a> objects associated with different connections can be used concurrently, but objects associated with a single connection cannot.</p>
+<p>The proactor <em>serializes</em> <a class="el" href="group__proactor__events.html">Events</a> for each connection - it never returns <a class="el" href="group__proactor__events.html">Events</a> for the same connection concurrently in different threads. Event-handling code can safely use any <a class="el" href="group__core.html">Core</a> object obtained from the current event. You can attach application data to <a class="el" href="group__core.html">Core</a> objects (for example with <a class="el" href="group__connection.html#gad8b6c777b525c9da9401e3a770db15da" title="Get the attachments that are associated with a connection object. ">pn_connection_attachments()</a>).</p>
+<p><a class="el" href="group__proactor.html#ga0f49c771fe3bff54f58c9d583ca30560" title="Return a PN_CONNECTION_WAKE event for connection as soon as possible. ">pn_connection_wake()</a> allows any thread to "wake up" a connection. It causes <a class="el" href="group__proactor.html#ga2b66a46f3e557010ec61bd105326753d" title="Wait until there are Events to handle. ">pn_proactor_wait()</a> to return a <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaa28a2bfee806bbc1fe31499c8eec39db0">PN_CONNECTION_WAKE</a> event that is serialized with the connection's other <a class="el" href="group__proactor__events.html">Events</a>. You can use this to implement communication between different connections, or from non-proactor threads.</p>
+<p>Serialization and <a class="el" href="group__proactor.html#ga0f49c771fe3bff54f58c9d583ca30560" title="Return a PN_CONNECTION_WAKE event for connection as soon as possible. ">pn_connection_wake()</a> simplify building applications with a shared thread pool, which serialize work per connection. Many other variations are possible, but you are responsible for any additional synchronization needed. </p>
<h2 class="groupheader">Function Documentation</h2>
-<a class="anchor" id="ga2e5c9fddae8d7aa07fc93438c5ae2d86"></a>
+<a id="ga9f6a27999303c6082edc581f880de37c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9f6a27999303c6082edc581f880de37c">◆ </a></span>pn_netaddr_str()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname">void pn_connection_wake </td>
+ <td class="memname">PNP_EXTERN int pn_netaddr_str </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> * </td>
- <td class="paramname"><em>connection</em></td><td>)</td>
+ <td class="paramtype">const <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a> * </td>
+ <td class="paramname"><em>addr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
<td></td>
+ <td class="paramtype">char * </td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t </td>
+ <td class="paramname"><em>size</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
-<p>Cause a PN_CONNECTION_WAKE event to be returned by the proactor, even if there are no IO events pending for the connection. </p>
-<dl class="section note"><dt>Note</dt><dd>Thread-safe: this is the only pn_connection_ function that can be called concurrently.</dd></dl>
-<p>Wakes can be "coalesced" - if several <a class="el" href="group__proactor.html#ga2e5c9fddae8d7aa07fc93438c5ae2d86" title="Cause a PN_CONNECTION_WAKE event to be returned by the proactor, even if there are no IO events pendi...">pn_connection_wake()</a> calls happen concurrently, there may be only one PN_CONNECTION_WAKE event. </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a13">broker.c</a>, and <a class="el" href="send_8c-example.html#a45">send.c</a>.</dd>
-</dl>
+<p>Format a network address as a human-readable string in buf. </p>
+<dl class="section return"><dt>Returns</dt><dd>the length of the string (excluding trailing '\0'), if >= size then the address was truncated. </dd></dl>
+
</div>
</div>
-<a class="anchor" id="gaaaf34821f3d29274ec41e7ce71022540"></a>
+<a id="ga7edab5e295c55e1c2169e39aaa082f8b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7edab5e295c55e1c2169e39aaa082f8b">◆ </a></span>pn_netaddr_local()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a>* pn_listener </td>
+ <td class="memname">PNP_EXTERN const <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a>* pn_netaddr_local </td>
<td>(</td>
- <td class="paramtype">void </td>
- <td class="paramname"></td><td>)</td>
+ <td class="paramtype"><a class="el" href="group__transport.html#gac26eda05f649bbf0399f3d8d78d12fa8">pn_transport_t</a> * </td>
+ <td class="paramname"><em>t</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
-<p>Create a listener. </p>
-<p>You can use pn_listener_set_context() or <a class="el" href="group__proactor.html#ga471e37ae503bf6b2635b7f5f5c2d88bf" title="Get the attachments that are associated with a listener object. ">pn_listener_attachments()</a> to set application data that can be accessed when accepting connections.</p>
-<p>You must pass the returned listener to <a class="el" href="group__proactor.html#ga68300a70c58a825564d5b4ee5d147696" title="Start listening with listener. ">pn_proactor_listen()</a>, the proactor will free the listener when it is no longer active. </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a90">broker.c</a>.</dd>
-</dl>
+<p>Get the local address of a transport. </p>
+<p>Return NULL if not available. </p>
+
</div>
</div>
-<a class="anchor" id="ga76bcf4efdfa82fff28318e1afad083dc"></a>
+<a id="ga59fa5ba7adc39bc8549645d5d33082c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga59fa5ba7adc39bc8549645d5d33082c0">◆ </a></span>pn_netaddr_remote()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PNP_EXTERN const <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a>* pn_netaddr_remote </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__transport.html#gac26eda05f649bbf0399f3d8d78d12fa8">pn_transport_t</a> * </td>
+ <td class="paramname"><em>t</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the remote address of a transport. </p>
+<p>Return NULL if not available. </p>
+
+</div>
+</div>
+<a id="ga00b1a40af2d837915d21cdb52ccb0c58"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga00b1a40af2d837915d21cdb52ccb0c58">◆ </a></span>pn_netaddr_sockaddr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PNP_EXTERN const struct sockaddr* pn_netaddr_sockaddr </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a> * </td>
+ <td class="paramname"><em>na</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>On POSIX or Windows, get the underlying <code>struct sockaddr</code>. </p>
+<p>Return NULL if not available. </p>
+
+</div>
+</div>
+<a id="gaddaf2b0b3e107d100e4c3658116a6c3c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaddaf2b0b3e107d100e4c3658116a6c3c">◆ </a></span>pn_netaddr_socklen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PNP_EXTERN size_t pn_netaddr_socklen </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="group__proactor.html#ga79d820cd3ad391cc5207c83dbb373a9c">pn_netaddr_t</a> * </td>
+ <td class="paramname"><em>na</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>On POSIX or Windows, get the size of the underlying <code>struct sockaddr</code>. </p>
+<p>Return 0 if not available. </p>
+
+</div>
+</div>
+<a id="gaf67a7642c9003b36255b58776b494c96"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf67a7642c9003b36255b58776b494c96">◆ </a></span>pn_proactor_addr()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname">int pn_listener_accept </td>
+ <td class="memname">PNP_EXTERN int pn_proactor_addr </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> * </td>
- <td class="paramname">, </td>
+ <td class="paramtype">char * </td>
+ <td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype"><a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> * </td>
- <td class="paramname"><em>connection</em> </td>
+ <td class="paramtype">size_t </td>
+ <td class="paramname"><em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"><em>host</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"><em>port</em> </td>
</tr>
<tr>
<td></td>
@@ -244,23 +362,29 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="grou
</table>
</div><div class="memdoc">
-<p>Asynchronously accept a connection using the listener. </p>
+<p>Format a host:port address string for <a class="el" href="group__proactor.html#ga9a9d1c4138226fa87160f4769b87f8e6" title="Bind connection to a new Transport connected to addr. ">pn_proactor_connect()</a> or <a class="el" href="group__proactor.html#gacbed6a4ab75ef8452c10d52e4cd62752" title="Start listening for incoming connections. ">pn_proactor_listen()</a> </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">connection</td><td>the listener takes ownership, do not free. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">addr</td><td>address is copied to this buffer, with trailing '\0' </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>size of addr buffer </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">host</td><td>network host name, DNS name or IP address </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">port</td><td>network service name or decimal port number, e.g. "amqp" or "5672" </td></tr>
</table>
</dd>
</dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a29">broker.c</a>.</dd>
+<dl class="section return"><dt>Returns</dt><dd>the length of network address (excluding trailing '\0'), if >= size then the address was truncated </dd></dl>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a88">broker.c</a>, <a class="el" href="direct_8c-example.html#a96">direct.c</a>, <a class="el" href="receive_8c-example.html#a56">receive.c</a>, and <a class="el" href="send_8c-example.html#a65">send.c</a>.</dd>
</dl>
</div>
</div>
-<a class="anchor" id="ga9d77772be7805709c87eeb01b06d67e2"></a>
+<a id="gac2a925b3de00efd8cd40fa9920169554"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac2a925b3de00efd8cd40fa9920169554">◆ </a></span>pn_proactor()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a>* pn_proactor </td>
+ <td class="memname">PNP_EXTERN <a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a>* pn_proactor </td>
<td>(</td>
<td class="paramtype">void </td>
<td class="paramname"></td><td>)</td>
@@ -270,19 +394,43 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="grou
</div><div class="memdoc">
<p>Create a proactor. </p>
-<p>Must be freed with <a class="el" href="group__proactor.html#ga10fa443c109cee057a3c30e69f93fcef" title="Free the proactor. ">pn_proactor_free()</a> </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a14">broker.c</a>, <a class="el" href="receive_8c-example.html#a53">receive.c</a>, and <a class="el" href="send_8c-example.html#a67">send.c</a>.</dd>
+<p>Must be freed with <a class="el" href="group__proactor.html#ga5260c2653d4af5eb2f1c8c6190e9d6cf" title="Free the proactor. ">pn_proactor_free()</a> </p>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a86">broker.c</a>, <a class="el" href="direct_8c-example.html#a93">direct.c</a>, <a class="el" href="receive_8c-example.html#a54">receive.c</a>, and <a class="el" href="send_8c-example.html#a63">send.c</a>.</dd>
+</dl>
+</div>
+</div>
+<a id="ga5260c2653d4af5eb2f1c8c6190e9d6cf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5260c2653d4af5eb2f1c8c6190e9d6cf">◆ </a></span>pn_proactor_free()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PNP_EXTERN void pn_proactor_free </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
+ <td class="paramname"><em>proactor</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Free the proactor. </p>
+<p>Abort open connections/listeners, clean up all resources. </p>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a91">broker.c</a>, <a class="el" href="direct_8c-example.html#a98">direct.c</a>, <a class="el" href="receive_8c-example.html#a59">receive.c</a>, and <a class="el" href="send_8c-example.html#a68">send.c</a>.</dd>
</dl>
</div>
</div>
-<a class="anchor" id="ga523ea983380a1566b3b1a7606d66422c"></a>
+<a id="ga9a9d1c4138226fa87160f4769b87f8e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9a9d1c4138226fa87160f4769b87f8e6">◆ </a></span>pn_proactor_connect()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname">int pn_proactor_connect </td>
+ <td class="memname">PNP_EXTERN void pn_proactor_connect </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
+ <td class="paramtype"><a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
<td class="paramname"><em>proactor</em>, </td>
</tr>
<tr>
@@ -295,13 +443,61 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="grou
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char * </td>
- <td class="paramname"><em>host</em>, </td>
+ <td class="paramname"><em>addr</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Bind <code>connection</code> to a new <a class="el" href="group__transport.html">Transport</a> connected to <code>addr</code>. </p>
+<p>Errors are returned as <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaa1ca722ce3c0b2c13a33636cded8430ba">PN_TRANSPORT_CLOSED</a> events by <a class="el" href="group__proactor.html#ga2b66a46f3e557010ec61bd105326753d" title="Wait until there are Events to handle. ">pn_proactor_wait()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>Thread safe.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">proactor</td><td>the proactor object</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">connection</td><td><code>proactor</code> <em>takes ownership</em> of <code>connection</code> and will automatically call <a class="el" href="group__connection.html#ga00cbef1a9f5062a6e1f113fda923f65e" title="Free a connection object. ">pn_connection_free()</a> after the final <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaa1ca722ce3c0b2c13a33636cded8430ba">PN_TRANSPORT_CLOSED</a> event is handled, or when <a class="el" href="group__proactor.html#ga5260c2653d4af5eb2f1c8c6190e9d6cf" title="Free the proactor. ">pn_proactor_free()</a> is called. You can prevent the automatic free with <a class="el" href="group__proactor.html#ga1950236260353f82729dbb4589ef6c27" title="Release ownership of connection, disassociate it from its proactor. ">pn_proactor_release_connection()</a></td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>the "host:port" network address, constructed by <a class="el" href="group__proactor.html#gaf67a7642c9003b36255b58776b494c96" title="Format a host:port address string for pn_proactor_connect() or pn_proactor_listen() ...">pn_proactor_addr()</a> An empty host will connect to the local host via the default protocol (IPV6 or IPV4). An empty port will connect to the standard AMQP port (5672).</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">connection</td><td><a class="el" href="group__connection.html">Connection</a> to be connected to <code>addr</code>. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="receive_8c-example.html#a57">receive.c</a>, and <a class="el" href="send_8c-example.html#a66">send.c</a>.</dd>
+</dl>
+</div>
+</div>
+<a id="gacbed6a4ab75ef8452c10d52e4cd62752"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacbed6a4ab75ef8452c10d52e4cd62752">◆ </a></span>pn_proactor_listen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PNP_EXTERN void pn_proactor_listen </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
+ <td class="paramname"><em>proactor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group__listener.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> * </td>
+ <td class="paramname"><em>listener</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char * </td>
- <td class="paramname"><em>port</em> </td>
+ <td class="paramname"><em>addr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>backlog</em> </td>
</tr>
<tr>
<td></td>
@@ -311,37 +507,39 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="grou
</table>
</div><div class="memdoc">
-<p>Connect connection to host/port. </p>
-<p>Connection and transport events will be returned by <a class="el" href="group__proactor.html#ga56f5830965c20d3dbfc63e795eb243c4" title="Wait for events to handle. ">pn_proactor_wait()</a></p>
+<p>Start listening for incoming connections. </p>
+<p>Errors are returned as <a class="el" href="group__proactor__events.html">Events</a> by <a class="el" href="group__proactor.html#ga2b66a46f3e557010ec61bd105326753d" title="Wait until there are Events to handle. ">pn_proactor_wait()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>Thread safe.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">proactor</td><td>the proactor object </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">connection</td><td>the proactor takes ownership, do not free </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">host</td><td>address to connect on </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">port</td><td>port to connect to</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">proactor</td><td>the proactor object</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">listener</td><td><code>proactor</code> <em>takes ownership</em> of <code>listener</code>, and will automatically call <a class="el" href="group__listener.html#gaf5769baf81fdfa80e5c4326dd4a9ab63" title="Free a listener. ">pn_listener_free()</a> after the final PN_LISTENER_CLOSE event is handled, or when <a class="el" href="group__proactor.html#ga5260c2653d4af5eb2f1c8c6190e9d6cf" title="Free the proactor. ">pn_proactor_free()</a> is called.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">addr</td><td>the "host:port" network address, constructed by <a class="el" href="group__proactor.html#gaf67a7642c9003b36255b58776b494c96" title="Format a host:port address string for pn_proactor_connect() or pn_proactor_listen() ...">pn_proactor_addr()</a> An empty host will listen for all protocols (IPV6 and IPV4) on all local interfaces. An empty port will listen on the standard AMQP port (5672).</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">backlog</td><td>of un-handled connection requests to allow before refusing connections. If <code>addr</code> resolves to multiple interface/protocol combinations, the backlog applies to each separately. </td></tr>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd>error on immediate error, e.g. an allocation failure. Other errors are indicated by connection or transport events via <a class="el" href="group__proactor.html#ga56f5830965c20d3dbfc63e795eb243c4" title="Wait for events to handle. ">pn_proactor_wait()</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="receive_8c-example.html#a54">receive.c</a>, and <a class="el" href="send_8c-example.html#a68">send.c</a>.</dd>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a89">broker.c</a>, and <a class="el" href="direct_8c-example.html#a97">direct.c</a>.</dd>
</dl>
</div>
</div>
-<a class="anchor" id="gab45680de5c02690a1f1ad1a3c70e9d65"></a>
+<a id="gac600bd88ed0fc6c2b66bed4a8740bd68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac600bd88ed0fc6c2b66bed4a8740bd68">◆ </a></span>pn_proactor_disconnect()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname">void pn_proactor_done </td>
+ <td class="memname">PNP_EXTERN void pn_proactor_disconnect </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
+ <td class="paramtype"><a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
<td class="paramname"><em>proactor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype"><a class="el" href="group__event.html#ga6bc581dfeaa8e8d46d07d37229d565c9">pn_event_batch_t</a> * </td>
- <td class="paramname"><em>events</em> </td>
+ <td class="paramtype"><a class="el" href="group__condition.html#ga11eb7db7d2c205169fe3d47c996a95a5">pn_condition_t</a> * </td>
+ <td class="paramname"><em>condition</em> </td>
</tr>
<tr>
<td></td>
@@ -351,87 +549,142 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="grou
</table>
</div><div class="memdoc">
-<p>Call when done handling a batch of events. </p>
-<p>Must be called exactly once to match each call to <a class="el" href="group__proactor.html#ga56f5830965c20d3dbfc63e795eb243c4" title="Wait for events to handle. ">pn_proactor_wait()</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>Thread-safe: may be called from any thread provided the exactly once rule is respected. </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a87">broker.c</a>, <a class="el" href="receive_8c-example.html#a59">receive.c</a>, and <a class="el" href="send_8c-example.html#a73">send.c</a>.</dd>
+<p>Disconnect all connections and listeners belonging to the proactor. </p>
+<p><a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaad5920df168cd28daaf253cad789d8aca">PN_LISTENER_CLOSE</a>, <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaa1ca722ce3c0b2c13a33636cded8430ba">PN_TRANSPORT_CLOSED</a> and other <a class="el" href="group__proactor__events.html">Events</a> are generated as usual.</p>
+<p>If no new listeners or connections are created, then a <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaa894e93f167ef39e28a07c9cdf6b1181b">PN_PROACTOR_INACTIVE</a> event will be generated when all connections and listeners are disconnected and no timeout is pending - see <a class="el" href="group__proactor.html#gad7cd71f06282eb290699d90c316b2d32" title="Return a PN_PROACTOR_TIMEOUT after timeout milliseconds elapse. ">pn_proactor_set_timeout()</a> <a class="el" href="group__proactor.html#gac206e4d0a1b7546d940a83cdd79ce93f" title="Cancel the pending timeout set by pn_proactor_set_timeout(). ">pn_proactor_cancel_timeout()</a></p>
+<p>Note the proactor remains active, connections and listeners created after a call to <a class="el" href="group__proactor.html#gac600bd88ed0fc6c2b66bed4a8740bd68" title="Disconnect all connections and listeners belonging to the proactor. ">pn_proactor_disconnect()</a> are not affected by it.</p>
+<dl class="section note"><dt>Note</dt><dd>Thread safe.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">proactor</td><td>the proactor</td></tr>
+ <tr><td class="paramname">condition</td><td>if not NULL the condition data is copied to each disconnected transports and listener and is available in the close event. </td></tr>
+ </table>
+ </dd>
</dl>
+
</div>
</div>
-<a class="anchor" id="ga10fa443c109cee057a3c30e69f93fcef"></a>
+<a id="ga2b66a46f3e557010ec61bd105326753d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2b66a46f3e557010ec61bd105326753d">◆ </a></span>pn_proactor_wait()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname">void pn_proactor_free </td>
+ <td class="memname">PNP_EXTERN <a class="el" href="group__event.html#ga6bc581dfeaa8e8d46d07d37229d565c9">pn_event_batch_t</a>* pn_proactor_wait </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
+ <td class="paramtype"><a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
<td class="paramname"><em>proactor</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
-<p>Free the proactor. </p>
-<p>Abort any open network connections and clean up all associated resources. </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a92">broker.c</a>, <a class="el" href="receive_8c-example.html#a60">receive.c</a>, and <a class="el" href="send_8c-example.html#a74">send.c</a>.</dd>
+<p>Wait until there are <a class="el" href="group__proactor__events.html">Events</a> to handle. </p>
+<p>You must call <a class="el" href="group__proactor.html#gade60ff2292b74841766f953b906285c0" title="Call when finished handling a batch of events. ">pn_proactor_done()</a> when you are finished with the batch, you must not use the batch pointer after calling <a class="el" href="group__proactor.html#gade60ff2292b74841766f953b906285c0" title="Call when finished handling a batch of events. ">pn_proactor_done()</a>.</p>
+<p>Normally it is most efficient to handle the entire batch in the calling thread and then call <a class="el" href="group__proactor.html#gade60ff2292b74841766f953b906285c0" title="Call when finished handling a batch of events. ">pn_proactor_done()</a>, but see <a class="el" href="group__proactor.html#gade60ff2292b74841766f953b906285c0" title="Call when finished handling a batch of events. ">pn_proactor_done()</a> for more options.</p>
+<p><a class="el" href="group__proactor.html#ga957eae24db6ec4962af79c5a06106115" title="Return Events if any are available immediately. ">pn_proactor_get()</a> is a non-blocking version of this call.</p>
+<dl class="section note"><dt>Note</dt><dd>Thread Safe.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>a non-empty batch of events that must be processed in sequence. </dd></dl>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a83">broker.c</a>, <a class="el" href="direct_8c-example.html#a90">direct.c</a>, <a class="el" href="receive_8c-example.html#a51">receive.c</a>, and <a class="el" href="send_8c-example.html#a60">send.c</a>.</dd>
</dl>
</div>
</div>
-<a class="anchor" id="gaff37a5b9d3d822ad9a961dae5155ebdb"></a>
+<a id="ga957eae24db6ec4962af79c5a06106115"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga957eae24db6ec4962af79c5a06106115">◆ </a></span>pn_proactor_get()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname">void pn_proactor_interrupt </td>
+ <td class="memname">PNP_EXTERN <a class="el" href="group__event.html#ga6bc581dfeaa8e8d46d07d37229d565c9">pn_event_batch_t</a>* pn_proactor_get </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
+ <td class="paramtype"><a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
<td class="paramname"><em>proactor</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
-<p>Cause PN_PROACTOR_INTERRUPT to be returned to exactly one call of <a class="el" href="group__proactor.html#ga56f5830965c20d3dbfc63e795eb243c4" title="Wait for events to handle. ">pn_proactor_wait()</a>. </p>
-<p>If threads are blocked in <a class="el" href="group__proactor.html#ga56f5830965c20d3dbfc63e795eb243c4" title="Wait for events to handle. ">pn_proactor_wait()</a>, one of them will be interrupted, otherwise the interrupt will be returned by a future call to <a class="el" href="group__proactor.html#ga56f5830965c20d3dbfc63e795eb243c4" title="Wait for events to handle. ">pn_proactor_wait()</a>. Calling <a class="el" href="group__proactor.html#gaff37a5b9d3d822ad9a961dae5155ebdb" title="Cause PN_PROACTOR_INTERRUPT to be returned to exactly one call of pn_proactor_wait(). ">pn_proactor_interrupt()</a> N times will return PN_PROACTOR_INTERRUPT to N current or future calls of <a class="el" href="group__proactor.html#ga56f5830965c20d3dbfc63e795eb243c4" title="Wait for events to handle. ">pn_proactor_wait()</a></p>
-<dl class="section note"><dt>Note</dt><dd>Thread-safe. </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a15">broker.c</a>.</dd>
-</dl>
+<p>Return <a class="el" href="group__proactor__events.html">Events</a> if any are available immediately. </p>
+<p>If not, return NULL. If the return value is not NULL, the behavior is the same as <a class="el" href="group__proactor.html#ga2b66a46f3e557010ec61bd105326753d" title="Wait until there are Events to handle. ">pn_proactor_wait()</a></p>
+<dl class="section note"><dt>Note</dt><dd>Thread Safe. </dd></dl>
+
</div>
</div>
-<a class="anchor" id="ga68300a70c58a825564d5b4ee5d147696"></a>
+<a id="gade60ff2292b74841766f953b906285c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gade60ff2292b74841766f953b906285c0">◆ </a></span>pn_proactor_done()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname">int pn_proactor_listen </td>
+ <td class="memname">PNP_EXTERN void pn_proactor_done </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
+ <td class="paramtype"><a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
<td class="paramname"><em>proactor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype"><a class="el" href="group__proactor.html#ga68ac7072ae60612d0bca5470014bf216">pn_listener_t</a> * </td>
- <td class="paramname"><em>listener</em>, </td>
+ <td class="paramtype"><a class="el" href="group__event.html#ga6bc581dfeaa8e8d46d07d37229d565c9">pn_event_batch_t</a> * </td>
+ <td class="paramname"><em>events</em> </td>
</tr>
<tr>
- <td class="paramkey"></td>
<td></td>
- <td class="paramtype">const char * </td>
- <td class="paramname"><em>host</em>, </td>
+ <td>)</td>
+ <td></td><td></td>
</tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Call when finished handling a batch of events. </p>
+<p>Must be called exactly once to match each call to <a class="el" href="group__proactor.html#ga2b66a46f3e557010ec61bd105326753d" title="Wait until there are Events to handle. ">pn_proactor_wait()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>Thread-safe: May be called from any thread provided the exactly once rule is respected. </dd></dl>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a85">broker.c</a>, <a class="el" href="direct_8c-example.html#a92">direct.c</a>, <a class="el" href="receive_8c-example.html#a53">receive.c</a>, and <a class="el" href="send_8c-example.html#a62">send.c</a>.</dd>
+</dl>
+</div>
+</div>
+<a id="gaa5255cd1bcb5d7f5639b53dc30712711"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa5255cd1bcb5d7f5639b53dc30712711">◆ </a></span>pn_proactor_interrupt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
<tr>
- <td class="paramkey"></td>
+ <td class="memname">PNP_EXTERN void pn_proactor_interrupt </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
+ <td class="paramname"><em>proactor</em></td><td>)</td>
<td></td>
- <td class="paramtype">const char * </td>
- <td class="paramname"><em>port</em>, </td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return a <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaaee05826a80e94b5b86c4544e4715f499">PN_PROACTOR_INTERRUPT</a> event as soon as possible. </p>
+<p>At least one PN_PROACTOR_INTERRUPT event will be returned after this call. Interrupts can be "coalesced" - if several <a class="el" href="group__proactor.html#gaa5255cd1bcb5d7f5639b53dc30712711" title="Return a PN_PROACTOR_INTERRUPT event as soon as possible. ">pn_proactor_interrupt()</a> calls happen close together, there may be only one PN_PROACTOR_INTERRUPT event that occurs after all of them.</p>
+<dl class="section note"><dt>Note</dt><dd>Thread-safe and async-signal-safe: can be called in a signal handler. This is the only pn_proactor function that is async-signal-safe. </dd></dl>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a13">broker.c</a>.</dd>
+</dl>
+</div>
+</div>
+<a id="gad7cd71f06282eb290699d90c316b2d32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad7cd71f06282eb290699d90c316b2d32">◆ </a></span>pn_proactor_set_timeout()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PNP_EXTERN void pn_proactor_set_timeout </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
+ <td class="paramname"><em>proactor</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>backlog</em> </td>
+ <td class="paramtype"><a class="el" href="group__api__types.html#ga9a701bc6dc9af9f42c3f4679172a723c">pn_millis_t</a> </td>
+ <td class="paramname"><em>timeout</em> </td>
</tr>
<tr>
<td></td>
@@ -441,74 +694,151 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="grou
</table>
</div><div class="memdoc">
-<p>Start listening with listener. </p>
-<p><a class="el" href="group__proactor.html#ga56f5830965c20d3dbfc63e795eb243c4" title="Wait for events to handle. ">pn_proactor_wait()</a> will return a PN_LISTENER_ACCEPT event when a connection can be accepted.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">proactor</td><td>the proactor object </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">listener</td><td>proactor takes ownership of listener, do not free </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">host</td><td>address to listen on </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">port</td><td>port to listen on </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">backlog</td><td>number of connection requests to queue</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>error on immediate error, e.g. an allocation failure. Other errors are indicated by <a class="el" href="group__proactor.html#ga6dba0fded7ca1718397151c62e65535b" title="Get the error condition for a listener. ">pn_listener_condition()</a> on the PN_LISTENER_CLOSE event. </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a89">broker.c</a>.</dd>
-</dl>
+<p>Return a <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaa4afa8c2da61f4c665c669fbe37b1c5fe">PN_PROACTOR_TIMEOUT</a> after <code>timeout</code> milliseconds elapse. </p>
+<p>If no threads are blocked in <a class="el" href="group__proactor.html#ga2b66a46f3e557010ec61bd105326753d" title="Wait until there are Events to handle. ">pn_proactor_wait()</a> when the timeout elapses, the event will be delivered to the next available thread.</p>
+<p>Calling <a class="el" href="group__proactor.html#gad7cd71f06282eb290699d90c316b2d32" title="Return a PN_PROACTOR_TIMEOUT after timeout milliseconds elapse. ">pn_proactor_set_timeout()</a> again before the PN_PROACTOR_TIMEOUT is delivered will cancel the previous timeout and deliver an event only after the new timeout.</p>
+<dl class="section note"><dt>Note</dt><dd>Thread safe </dd></dl>
+
</div>
</div>
-<a class="anchor" id="ga8428d00193008841e529aae6a922fa5f"></a>
+<a id="gac206e4d0a1b7546d940a83cdd79ce93f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac206e4d0a1b7546d940a83cdd79ce93f">◆ </a></span>pn_proactor_cancel_timeout()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname">void pn_proactor_set_timeout </td>
+ <td class="memname">PNP_EXTERN void pn_proactor_cancel_timeout </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
- <td class="paramname"><em>proactor</em>, </td>
+ <td class="paramtype"><a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
+ <td class="paramname"><em>proactor</em></td><td>)</td>
+ <td></td>
</tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Cancel the pending timeout set by <a class="el" href="group__proactor.html#gad7cd71f06282eb290699d90c316b2d32" title="Return a PN_PROACTOR_TIMEOUT after timeout milliseconds elapse. ">pn_proactor_set_timeout()</a>. </p>
+<p>Does nothing if no timeout is set.</p>
+<dl class="section note"><dt>Note</dt><dd>Thread safe </dd></dl>
+
+</div>
+</div>
+<a id="ga1950236260353f82729dbb4589ef6c27"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1950236260353f82729dbb4589ef6c27">◆ </a></span>pn_proactor_release_connection()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
<tr>
- <td class="paramkey"></td>
+ <td class="memname">PNP_EXTERN void pn_proactor_release_connection </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> * </td>
+ <td class="paramname"><em>connection</em></td><td>)</td>
<td></td>
- <td class="paramtype"><a class="el" href="group__api__types.html#ga9a701bc6dc9af9f42c3f4679172a723c">pn_millis_t</a> </td>
- <td class="paramname"><em>timeout</em> </td>
</tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Release ownership of <code>connection</code>, disassociate it from its proactor. </p>
+<p>The connection and related objects (<a class="el" href="group__session.html">sessions</a>, <a class="el" href="group__link.html">links</a> and so on) remain intact, but the transport is closed and unbound. The proactor will not return any more events for this connection. The caller must call <a class="el" href="group__connection.html#ga00cbef1a9f5062a6e1f113fda923f65e" title="Free a connection object. ">pn_connection_free()</a>, either directly or indirectly by re-using <code>connection</code> in another call to <a class="el" href="group__proactor.html#ga9a9d1c4138226fa87160f4769b87f8e6" title="Bind connection to a new Transport connected to addr. ">pn_proactor_connect()</a> or <a class="el" href="group__proactor.html#gacbed6a4ab75ef8452c10d52e4cd62752" title="Start listening for incoming connections. ">pn_proactor_listen()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd><b>NOT</b> thread safe, call from connection event handler.</dd>
+<dd>
+If <code>connection</code> does not belong to a proactor, this call does nothing.</dd>
+<dd>
+This has nothing to do with <a class="el" href="group__connection.html#ga7c88b4833cf81d801b27d00b45d137b5" title="Release a connection object. ">pn_connection_release()</a> </dd></dl>
+
+</div>
+</div>
+<a id="ga0f49c771fe3bff54f58c9d583ca30560"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0f49c771fe3bff54f58c9d583ca30560">◆ </a></span>pn_connection_wake()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
<tr>
+ <td class="memname">PNP_EXTERN void pn_connection_wake </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> * </td>
+ <td class="paramname"><em>connection</em></td><td>)</td>
<td></td>
- <td>)</td>
- <td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
-<p>Cause PN_PROACTOR_TIMEOUT to be returned to a thread calling wait() after timeout milliseconds. </p>
-<p>Thread-safe.</p>
-<p>Note that calling <a class="el" href="group__proactor.html#ga8428d00193008841e529aae6a922fa5f" title="Cause PN_PROACTOR_TIMEOUT to be returned to a thread calling wait() after timeout milliseconds...">pn_proactor_set_timeout()</a> again before the PN_PROACTOR_TIMEOUT is delivered will cancel the previous timeout and deliver an event only after the new timeout. <code>pn_proactor_set_timeout(0)</code> will cancel the timeout without setting a new one. </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="send_8c-example.html#a31">send.c</a>.</dd>
+<p>Return a <a class="el" href="group__event.html#gga4876e2eed24a4d4e4c52b99842103cdaa28a2bfee806bbc1fe31499c8eec39db0">PN_CONNECTION_WAKE</a> event for <code>connection</code> as soon as possible. </p>
+<p>At least one wake event will be returned, serialized with other <a class="el" href="group__proactor__events.html">Events</a> for the same connection. Wakes can be "coalesced" - if several <a class="el" href="group__proactor.html#ga0f49c771fe3bff54f58c9d583ca30560" title="Return a PN_CONNECTION_WAKE event for connection as soon as possible. ">pn_connection_wake()</a> calls happen close together, there may be only one PN_CONNECTION_WAKE event that occurs after all of them.</p>
+<dl class="section note"><dt>Note</dt><dd>If <code>connection</code> does not belong to a proactor, this call does nothing.</dd>
+<dd>
+Thread safe </dd></dl>
+<dl><dt><b>Examples: </b></dt><dd><a class="el" href="broker_8c-example.html#a12">broker.c</a>, and <a class="el" href="direct_8c-example.html#a85">direct.c</a>.</dd>
</dl>
</div>
</div>
-<a class="anchor" id="ga56f5830965c20d3dbfc63e795eb243c4"></a>
+<a id="ga4727a4e26f19efcff0d48960cbba2f40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4727a4e26f19efcff0d48960cbba2f40">◆ </a></span>pn_connection_proactor()</h2>
+
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="group__event.html#ga6bc581dfeaa8e8d46d07d37229d565c9">pn_event_batch_t</a>* pn_proactor_wait </td>
+ <td class="memname">PNP_EXTERN <a class="el" href="types_8h.html#abba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a>* pn_connection_proactor </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="group__proactor.html#gabba42c7929dfceb9d296535bad0c93dc">pn_proactor_t</a> * </td>
- <td class="paramname"><em>proactor</em></td><td>)</td>
+ <td class="paramtype"><a class="el" href="group__connection.html#ga886351d81ff3a977a284a206526c5aff">pn_connection_t</a> * </td>
+ <td class="paramname"><em>connection</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
-<p>Wait for events to handle. </p>
-<p>Handle events in the returned batch by calling <a class="el" href="group__event.html#gac3fbf151357d3101ac294cb675348c76" title="Experimental - Remove the next event from the batch and return it. ">pn_event_batch_next()</a> until it returns NULL. You must call <a class="el" href="group__proactor.html#gab45680de5c02690a1f1ad1a3c70e9d65" title="Call when done handling a batch of events. ">pn_proactor_done()</a> when you are finished with the batch.</p>
-<p>If you call <a class="el" href="group__proactor.html#gab45680de5c02690a1f1ad1a3c70e9d65" title="Call when done handling a batch of events. ">pn_proa
<TRUNCATED>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org