Files
moslab-code/doc/source/html/group__cxx__ipc__server.html
2025-09-12 15:55:45 +02:00

204 lines
19 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- HTML header for doxygen 1.9.1-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<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.15.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>L4Re Operating System Framework: Server-Side IPC framework</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="l4re-awesome.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="L4Re_rgb_logo_quer_hg_h55.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">L4Re Operating System Framework
</div>
<div id="projectbrief">Interface and Usage Documentation</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.15.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('group__cxx__ipc__server.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">Server-Side IPC framework <div class="ingroups"><a class="el" href="group__client__server__ipc.html">The L4Re IPC Framework</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>Server-Side framework for implementing object-oriented servers.
<a href="#details">More...</a></p>
<div id="dynsection-0" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Collaboration diagram for Server-Side IPC framework:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__cxx__ipc__server.svg" width="440" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-namespaces" class="groupheader"><a id="namespaces" name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr" id="r_L4_3A_3AIpc_5Fsvr"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceL4_1_1Ipc__svr.html">L4::Ipc_svr</a></td></tr>
<tr class="memdesc:namespaceL4_1_1Ipc__svr"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper classes for <a class="el" href="classL4_1_1Server.html" title="Basic server loop for handling client requests.">L4::Server</a> instantiation. <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr_3A_3AServer_5Fiface" id="r_L4_3A_3AIpc_5Fsvr_3A_3AServer_5Fiface"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Ipc__svr_1_1Server__iface.html">L4::Ipc_svr::Server_iface</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interface for server-loop related functions. <a href="classL4_1_1Ipc__svr_1_1Server__iface.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3ABasic_5Fregistry" id="r_L4_3A_3ABasic_5Fregistry"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Basic__registry.html">L4::Basic_registry</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This registry returns the corresponding server object based on the label of an <a class="el" href="classL4_1_1Ipc__gate.html" title="The C++ IPC gate interface, see IPC-Gate API for the C interface.">Ipc_gate</a>. <a href="classL4_1_1Basic__registry.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr_3A_3AIgnore_5Ferrors" id="r_L4_3A_3AIpc_5Fsvr_3A_3AIgnore_5Ferrors"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structL4_1_1Ipc__svr_1_1Ignore__errors.html">L4::Ipc_svr::Ignore_errors</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mix in for LOOP_HOOKS to ignore IPC errors. <a href="structL4_1_1Ipc__svr_1_1Ignore__errors.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr_3A_3ADefault_5Ftimeout" id="r_L4_3A_3AIpc_5Fsvr_3A_3ADefault_5Ftimeout"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structL4_1_1Ipc__svr_1_1Default__timeout.html">L4::Ipc_svr::Default_timeout</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mix in for LOOP_HOOKS to use a 0 send and a infinite receive timeout. <a href="structL4_1_1Ipc__svr_1_1Default__timeout.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr_3A_3ACompound_5Freply" id="r_L4_3A_3AIpc_5Fsvr_3A_3ACompound_5Freply"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structL4_1_1Ipc__svr_1_1Compound__reply.html">L4::Ipc_svr::Compound_reply</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mix in for LOOP_HOOKS to always use compound reply and wait. <a href="structL4_1_1Ipc__svr_1_1Compound__reply.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr_3A_3ADefault_5Fsetup_5Fwait" id="r_L4_3A_3AIpc_5Fsvr_3A_3ADefault_5Fsetup_5Fwait"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structL4_1_1Ipc__svr_1_1Default__setup__wait.html">L4::Ipc_svr::Default_setup_wait</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mix in for LOOP_HOOKS for setup_wait no op. <a href="structL4_1_1Ipc__svr_1_1Default__setup__wait.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr_3A_3ABr_5Fmanager_5Fno_5Fbuffers" id="r_L4_3A_3AIpc_5Fsvr_3A_3ABr_5Fmanager_5Fno_5Fbuffers"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Ipc__svr_1_1Br__manager__no__buffers.html">L4::Ipc_svr::Br_manager_no_buffers</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty implementation of <a class="el" href="classL4_1_1Ipc__svr_1_1Server__iface.html" title="Interface for server-loop related functions.">Server_iface</a>. <a href="classL4_1_1Ipc__svr_1_1Br__manager__no__buffers.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr_3A_3ADefault_5Floop_5Fhooks" id="r_L4_3A_3AIpc_5Fsvr_3A_3ADefault_5Floop_5Fhooks"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structL4_1_1Ipc__svr_1_1Default__loop__hooks.html">L4::Ipc_svr::Default_loop_hooks</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default LOOP_HOOKS. <a href="structL4_1_1Ipc__svr_1_1Default__loop__hooks.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AServer_3C_20LOOP_5FHOOKS_20_3E" id="r_L4_3A_3AServer_3C_20LOOP_5FHOOKS_20_3E"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Server.html">L4::Server&lt; LOOP_HOOKS &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Basic server loop for handling client requests. <a href="classL4_1_1Server.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AServer_5Fobject" id="r_L4_3A_3AServer_5Fobject"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Server__object.html">L4::Server_object</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Abstract server object to be used with <a class="el" href="classL4_1_1Server.html" title="Basic server loop for handling client requests.">L4::Server</a> and <a class="el" href="classL4_1_1Basic__registry.html" title="This registry returns the corresponding server object based on the label of an Ipc_gate.">L4::Basic_registry</a>. <a href="classL4_1_1Server__object.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AServer_5Fobject_5Ft_3C_20IFACE_2C_20BASE_20_3E" id="r_L4_3A_3AServer_5Fobject_5Ft_3C_20IFACE_2C_20BASE_20_3E"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structL4_1_1Server__object__t.html">L4::Server_object_t&lt; IFACE, BASE &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base class (template) for server implementing server objects. <a href="structL4_1_1Server__object__t.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AServer_5Fobject_5Fx_3C_20Derived_2C_20IFACE_2C_20BASE_20_3E" id="r_L4_3A_3AServer_5Fobject_5Fx_3C_20Derived_2C_20IFACE_2C_20BASE_20_3E"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structL4_1_1Server__object__x.html">L4::Server_object_x&lt; Derived, IFACE, BASE &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper class to implement p_dispatch based server objects. <a href="structL4_1_1Server__object__x.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AIrq_5Fhandler_5Fobject" id="r_L4_3A_3AIrq_5Fhandler_5Fobject"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structL4_1_1Irq__handler__object.html">L4::Irq_handler_object</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classL4_1_1Server.html" title="Basic server loop for handling client requests.">Server</a> object base class for handling IRQ messages. <a href="structL4_1_1Irq__handler__object.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr_3A_3ATimeout" id="r_L4_3A_3AIpc_5Fsvr_3A_3ATimeout"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Ipc__svr_1_1Timeout.html">L4::Ipc_svr::Timeout</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback interface for <a class="el" href="classL4_1_1Ipc__svr_1_1Timeout__queue.html" title="Timeout queue to be used in l4re server loop.">Timeout_queue</a>. <a href="classL4_1_1Ipc__svr_1_1Timeout.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr_3A_3ATimeout_5Fqueue" id="r_L4_3A_3AIpc_5Fsvr_3A_3ATimeout_5Fqueue"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Ipc__svr_1_1Timeout__queue.html">L4::Ipc_svr::Timeout_queue</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classL4_1_1Ipc__svr_1_1Timeout.html" title="Callback interface for Timeout_queue.">Timeout</a> queue to be used in l4re server loop. <a href="classL4_1_1Ipc__svr_1_1Timeout__queue.html#details">More...</a><br /></td></tr>
<tr class="memitem:L4_3A_3AIpc_5Fsvr_3A_3ATimeout_5Fqueue_5Fhooks_3C_20HOOKS_2C_20BR_5FMAN_20_3E" id="r_L4_3A_3AIpc_5Fsvr_3A_3ATimeout_5Fqueue_5Fhooks_3C_20HOOKS_2C_20BR_5FMAN_20_3E"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Ipc__svr_1_1Timeout__queue__hooks.html">L4::Ipc_svr::Timeout_queue_hooks&lt; HOOKS, BR_MAN &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loop hooks mixin for integrating a timeout queue into the server loop. <a href="classL4_1_1Ipc__svr_1_1Timeout__queue__hooks.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-enum-members" class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga53acccae8e5dc9803ebb8583e1e9de30" id="r_ga53acccae8e5dc9803ebb8583e1e9de30"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga53acccae8e5dc9803ebb8583e1e9de30">L4::Ipc_svr::Reply_mode</a> { <a class="el" href="#gga53acccae8e5dc9803ebb8583e1e9de30afec233db6432949dbc89dfda6cb03294">L4::Ipc_svr::Reply_compound</a>
, <a class="el" href="#gga53acccae8e5dc9803ebb8583e1e9de30a591e182e116c067db8a166dd8ec5b2d3">L4::Ipc_svr::Reply_separate</a>
}</td></tr>
<tr class="memdesc:ga53acccae8e5dc9803ebb8583e1e9de30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reply mode for server loop. <a href="#ga53acccae8e5dc9803ebb8583e1e9de30">More...</a><br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>Server-Side framework for implementing object-oriented servers. </p>
<p>´ </p>
<a name="doc-enum-members" id="doc-enum-members"></a><h2 id="header-doc-enum-members" class="groupheader">Enumeration Type Documentation</h2>
<a id="ga53acccae8e5dc9803ebb8583e1e9de30" name="ga53acccae8e5dc9803ebb8583e1e9de30"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga53acccae8e5dc9803ebb8583e1e9de30">&#9670;&#160;</a></span>Reply_mode</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#ga53acccae8e5dc9803ebb8583e1e9de30">L4::Ipc_svr::Reply_mode</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reply mode for server loop. </p>
<p>The reply mode specifies if the server loop shall do a compound reply and wait operation (<a class="el" href="#gga53acccae8e5dc9803ebb8583e1e9de30afec233db6432949dbc89dfda6cb03294" title="Server shall use a compound reply and wait (fast).">Reply_compound</a>), which is the most performant method. Note, setup_wait() is called before the reply. The other way is to call reply and wait separately and call setup_wait in between.</p>
<p>The actual mode is determined by the return value of the before_reply() hook in the LOOP_HOOKS of <a class="el" href="classL4_1_1Server.html" title="Basic server loop for handling client requests.">L4::Server</a>. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga53acccae8e5dc9803ebb8583e1e9de30afec233db6432949dbc89dfda6cb03294" name="gga53acccae8e5dc9803ebb8583e1e9de30afec233db6432949dbc89dfda6cb03294"></a>Reply_compound&#160;</td><td class="fielddoc"><p><a class="el" href="classL4_1_1Server.html" title="Basic server loop for handling client requests.">Server</a> shall use a compound reply and wait (fast). </p>
</td></tr>
<tr><td class="fieldname"><a id="gga53acccae8e5dc9803ebb8583e1e9de30a591e182e116c067db8a166dd8ec5b2d3" name="gga53acccae8e5dc9803ebb8583e1e9de30a591e182e116c067db8a166dd8ec5b2d3"></a>Reply_separate&#160;</td><td class="fielddoc"><p><a class="el" href="classL4_1_1Server.html" title="Basic server loop for handling client requests.">Server</a> shall call reply and wait separately. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="ipc__server__loop_source.html#l00046">46</a> of file <a class="el" href="ipc__server__loop_source.html">ipc_server_loop</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- HTML footer for doxygen 1.9.1-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for L4Re Operating System Framework by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.15.0 </li>
</ul>
</div>
</body>
</html>