/usr/share/doc/libpion-doc/html/tcp_2server_8hpp_source.html is in libpion-doc 5.0.7+dfsg-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.8.12"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>pion: include/pion/tcp/server.hpp Source File</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="doxygen.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="projectalign" style="padding-left: 0.5em;">
<div id="projectname">pion
 <span id="projectnumber">5.0.6</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.12 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_96d8a58f4ca411bbafcf73a070f69a21.html">pion</a></li><li class="navelem"><a class="el" href="dir_4713621c0f26f736c910ec7d682ed4d1.html">tcp</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">server.hpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// ---------------------------------------------------------------------</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// pion: a Boost C++ framework for building lightweight HTTP interfaces</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// ---------------------------------------------------------------------</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion)</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">//</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">// Distributed under the Boost Software License, Version 1.0.</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">// See http://www.boost.org/LICENSE_1_0.txt</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">//</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#ifndef __PION_TCP_SERVER_HEADER__</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#define __PION_TCP_SERVER_HEADER__</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <set></span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <boost/asio.hpp></span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <boost/noncopyable.hpp></span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <boost/shared_ptr.hpp></span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <boost/thread/mutex.hpp></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <boost/thread/condition.hpp></span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <pion/config.hpp></span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <pion/logger.hpp></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <pion/scheduler.hpp></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <pion/tcp/connection.hpp></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespacepion.html">pion</a> { <span class="comment">// begin namespace pion</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span>tcp { <span class="comment">// begin namespace tcp</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html"> 32</a></span> <span class="keyword">class </span>PION_API <a class="code" href="classpion_1_1tcp_1_1server.html">server</a> :</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">private</span> boost::noncopyable</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a728020c37ae9ec06197d01b195a24f9e"> 38</a></span>  <span class="keyword">virtual</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a728020c37ae9ec06197d01b195a24f9e">~server</a>() { <span class="keywordflow">if</span> (m_is_listening) stop(<span class="keyword">false</span>); }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordtype">void</span> start(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordtype">void</span> stop(<span class="keywordtype">bool</span> wait_until_finished = <span class="keyword">false</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordtype">void</span> join(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordtype">void</span> set_ssl_key_file(<span class="keyword">const</span> std::string& pem_key_file);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  std::size_t get_connections(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#acac1becb82699098831c720c96a1b45a"> 64</a></span>  <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classpion_1_1tcp_1_1server.html#acac1becb82699098831c720c96a1b45a">get_port</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_endpoint.port(); }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  </div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a392e9ede66cf2f96af52655363951e96"> 67</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a392e9ede66cf2f96af52655363951e96">set_port</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> p) { m_endpoint.port(p); }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a13e8d810b63726586856badc21a106e1"> 70</a></span>  <span class="keyword">inline</span> boost::asio::ip::address <a class="code" href="classpion_1_1tcp_1_1server.html#a13e8d810b63726586856badc21a106e1">get_address</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_endpoint.address(); }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#aa711c8de12d16c2806dc5fe57bed512e"> 73</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#aa711c8de12d16c2806dc5fe57bed512e">set_address</a>(<span class="keyword">const</span> boost::asio::ip::address& addr) { m_endpoint.address(addr); }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#abc6fcd7827ae52758a243a4c198013a2"> 76</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> boost::asio::ip::tcp::endpoint& <a class="code" href="classpion_1_1tcp_1_1server.html#abc6fcd7827ae52758a243a4c198013a2">get_endpoint</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_endpoint; }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  </div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a2f460aa6795aa6169c1b1fca5c4daa21"> 79</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a2f460aa6795aa6169c1b1fca5c4daa21">set_endpoint</a>(<span class="keyword">const</span> boost::asio::ip::tcp::endpoint& ep) { m_endpoint = ep; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#ab969d3a5400d2194d9df6b415ce14ef9"> 82</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classpion_1_1tcp_1_1server.html#ab969d3a5400d2194d9df6b415ce14ef9">get_ssl_flag</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ssl_flag; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#ac6bb13e1f833a39b28bff7fa71029476"> 85</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#ac6bb13e1f833a39b28bff7fa71029476">set_ssl_flag</a>(<span class="keywordtype">bool</span> b = <span class="keyword">true</span>) { m_ssl_flag = b; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a11201c6b34424ff5ec11c963629281ed"> 88</a></span>  <span class="keyword">inline</span> connection::ssl_context_type& <a class="code" href="classpion_1_1tcp_1_1server.html#a11201c6b34424ff5ec11c963629281ed">get_ssl_context_type</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> m_ssl_context; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#af0ce958c1bdefb7eee29a30659c38262"> 91</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classpion_1_1tcp_1_1server.html#af0ce958c1bdefb7eee29a30659c38262">is_listening</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_is_listening; }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#abe68393818a75e45d49757532802361e"> 94</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#abe68393818a75e45d49757532802361e">set_logger</a>(<a class="code" href="structpion_1_1logger.html">logger</a> log_ptr) { m_logger = log_ptr; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  </div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#af038c70801875d3d6a3826eb7a80b1c3"> 97</a></span>  <span class="keyword">inline</span> <a class="code" href="structpion_1_1logger.html">logger</a> <a class="code" href="classpion_1_1tcp_1_1server.html#af038c70801875d3d6a3826eb7a80b1c3">get_logger</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> m_logger; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  </div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a41d5b598e52f70db5ae4302bb02370b8"> 100</a></span>  <span class="keyword">inline</span> boost::asio::ip::tcp::acceptor& <a class="code" href="classpion_1_1tcp_1_1server.html#a41d5b598e52f70db5ae4302bb02370b8">get_acceptor</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> m_tcp_acceptor; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a0224269294d70ee9f9a62d1c567f18e3"> 103</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> boost::asio::ip::tcp::acceptor& <a class="code" href="classpion_1_1tcp_1_1server.html#a0224269294d70ee9f9a62d1c567f18e3">get_acceptor</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_tcp_acceptor; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">explicit</span> <a class="code" href="classpion_1_1tcp_1_1server.html">server</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tcp_port);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">explicit</span> <a class="code" href="classpion_1_1tcp_1_1server.html">server</a>(<span class="keyword">const</span> boost::asio::ip::tcp::endpoint& endpoint);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">explicit</span> <a class="code" href="classpion_1_1tcp_1_1server.html">server</a>(<a class="code" href="classpion_1_1scheduler.html">scheduler</a>& sched, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tcp_port = 0);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <a class="code" href="classpion_1_1tcp_1_1server.html">server</a>(<a class="code" href="classpion_1_1scheduler.html">scheduler</a>& sched, <span class="keyword">const</span> boost::asio::ip::tcp::endpoint& endpoint);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  </div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a1e8ae789868cd0b8eb08e5c3da9b33a4"> 144</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a1e8ae789868cd0b8eb08e5c3da9b33a4">handle_connection</a>(<span class="keyword">const</span> tcp::connection_ptr& tcp_conn) {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  tcp_conn->set_lifecycle(connection::LIFECYCLE_CLOSE); <span class="comment">// make sure it will get closed</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  tcp_conn->finish();</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  </div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a814a44fc3d677071b9e2407898765316"> 150</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a814a44fc3d677071b9e2407898765316">before_starting</a>(<span class="keywordtype">void</span>) {}</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a23766baf23b7b5be2e43da55547c3a31"> 153</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a23766baf23b7b5be2e43da55547c3a31">after_stopping</a>(<span class="keywordtype">void</span>) {}</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a436e6dbcc3b128b2f9a9be6fd99421b6"> 156</a></span>  <span class="keyword">inline</span> boost::asio::io_service& <a class="code" href="classpion_1_1tcp_1_1server.html#a436e6dbcc3b128b2f9a9be6fd99421b6">get_io_service</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> m_active_scheduler.get_io_service(); }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  </div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a0fd391b946961fca8604b902ddb06f7d"> 160</a></span>  <a class="code" href="structpion_1_1logger.html">logger</a> <a class="code" href="classpion_1_1tcp_1_1server.html#a0fd391b946961fca8604b902ddb06f7d">m_logger</a>;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordtype">void</span> handle_stop_request(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordtype">void</span> listen(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordtype">void</span> handle_accept(<span class="keyword">const</span> tcp::connection_ptr& tcp_conn,</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keyword">const</span> boost::system::error_code& accept_error);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordtype">void</span> handle_ssl_handshake(<span class="keyword">const</span> tcp::connection_ptr& tcp_conn,</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keyword">const</span> boost::system::error_code& handshake_error);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordtype">void</span> finish_connection(<span class="keyword">const</span> tcp::connection_ptr& tcp_conn);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  std::size_t prune_connections(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">typedef</span> std::set<tcp::connection_ptr> ConnectionPool;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <a class="code" href="classpion_1_1single__service__scheduler.html">single_service_scheduler</a> m_default_scheduler;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <a class="code" href="classpion_1_1scheduler.html">scheduler</a> & m_active_scheduler;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  boost::asio::ip::tcp::acceptor m_tcp_acceptor;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  connection::ssl_context_type m_ssl_context;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  boost::condition m_server_has_stopped;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  boost::condition m_no_more_connections;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  ConnectionPool m_conn_pool;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  boost::asio::ip::tcp::endpoint m_endpoint;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordtype">bool</span> m_ssl_flag;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordtype">bool</span> m_is_listening;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">mutable</span> boost::mutex m_mutex;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> };</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">typedef</span> boost::shared_ptr<server> server_ptr;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> } <span class="comment">// end namespace tcp</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> } <span class="comment">// end namespace pion</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor">#endif</span></div><div class="ttc" id="classpion_1_1tcp_1_1server_html_a11201c6b34424ff5ec11c963629281ed"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a11201c6b34424ff5ec11c963629281ed">pion::tcp::server::get_ssl_context_type</a></div><div class="ttdeci">connection::ssl_context_type & get_ssl_context_type(void)</div><div class="ttdoc">returns the SSL context for configuration </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00088">server.hpp:88</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a2f460aa6795aa6169c1b1fca5c4daa21"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a2f460aa6795aa6169c1b1fca5c4daa21">pion::tcp::server::set_endpoint</a></div><div class="ttdeci">void set_endpoint(const boost::asio::ip::tcp::endpoint &ep)</div><div class="ttdoc">sets tcp endpoint that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00079">server.hpp:79</a></div></div>
<div class="ttc" id="classpion_1_1single__service__scheduler_html"><div class="ttname"><a href="classpion_1_1single__service__scheduler.html">pion::single_service_scheduler</a></div><div class="ttdef"><b>Definition:</b> <a href="scheduler_8hpp_source.html#l00246">scheduler.hpp:246</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html">pion::tcp::server</a></div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00032">server.hpp:32</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_ab969d3a5400d2194d9df6b415ce14ef9"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#ab969d3a5400d2194d9df6b415ce14ef9">pion::tcp::server::get_ssl_flag</a></div><div class="ttdeci">bool get_ssl_flag(void) const</div><div class="ttdoc">returns true if the server uses SSL to encrypt connections </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00082">server.hpp:82</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_af0ce958c1bdefb7eee29a30659c38262"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#af0ce958c1bdefb7eee29a30659c38262">pion::tcp::server::is_listening</a></div><div class="ttdeci">bool is_listening(void) const</div><div class="ttdoc">returns true if the server is listening for connections </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00091">server.hpp:91</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a13e8d810b63726586856badc21a106e1"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a13e8d810b63726586856badc21a106e1">pion::tcp::server::get_address</a></div><div class="ttdeci">boost::asio::ip::address get_address(void) const</div><div class="ttdoc">returns IP address that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00070">server.hpp:70</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a0224269294d70ee9f9a62d1c567f18e3"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a0224269294d70ee9f9a62d1c567f18e3">pion::tcp::server::get_acceptor</a></div><div class="ttdeci">const boost::asio::ip::tcp::acceptor & get_acceptor(void) const</div><div class="ttdoc">returns const reference to the TCP connection acceptor </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00103">server.hpp:103</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a41d5b598e52f70db5ae4302bb02370b8"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a41d5b598e52f70db5ae4302bb02370b8">pion::tcp::server::get_acceptor</a></div><div class="ttdeci">boost::asio::ip::tcp::acceptor & get_acceptor(void)</div><div class="ttdoc">returns mutable reference to the TCP connection acceptor </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00100">server.hpp:100</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a436e6dbcc3b128b2f9a9be6fd99421b6"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a436e6dbcc3b128b2f9a9be6fd99421b6">pion::tcp::server::get_io_service</a></div><div class="ttdeci">boost::asio::io_service & get_io_service(void)</div><div class="ttdoc">returns an async I/O service used to schedule work </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00156">server.hpp:156</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_abc6fcd7827ae52758a243a4c198013a2"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#abc6fcd7827ae52758a243a4c198013a2">pion::tcp::server::get_endpoint</a></div><div class="ttdeci">const boost::asio::ip::tcp::endpoint & get_endpoint(void) const</div><div class="ttdoc">returns tcp endpoint that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00076">server.hpp:76</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_abe68393818a75e45d49757532802361e"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#abe68393818a75e45d49757532802361e">pion::tcp::server::set_logger</a></div><div class="ttdeci">void set_logger(logger log_ptr)</div><div class="ttdoc">sets the logger to be used </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00094">server.hpp:94</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a1e8ae789868cd0b8eb08e5c3da9b33a4"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a1e8ae789868cd0b8eb08e5c3da9b33a4">pion::tcp::server::handle_connection</a></div><div class="ttdeci">virtual void handle_connection(const tcp::connection_ptr &tcp_conn)</div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00144">server.hpp:144</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_acac1becb82699098831c720c96a1b45a"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#acac1becb82699098831c720c96a1b45a">pion::tcp::server::get_port</a></div><div class="ttdeci">unsigned int get_port(void) const</div><div class="ttdoc">returns tcp port number that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00064">server.hpp:64</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a814a44fc3d677071b9e2407898765316"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a814a44fc3d677071b9e2407898765316">pion::tcp::server::before_starting</a></div><div class="ttdeci">virtual void before_starting(void)</div><div class="ttdoc">called before the TCP server starts listening for new connections </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00150">server.hpp:150</a></div></div>
<div class="ttc" id="structpion_1_1logger_html"><div class="ttname"><a href="structpion_1_1logger.html">pion::logger</a></div><div class="ttdef"><b>Definition:</b> <a href="logger_8hpp_source.html#l00238">logger.hpp:238</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_ac6bb13e1f833a39b28bff7fa71029476"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#ac6bb13e1f833a39b28bff7fa71029476">pion::tcp::server::set_ssl_flag</a></div><div class="ttdeci">void set_ssl_flag(bool b=true)</div><div class="ttdoc">sets value of SSL flag (true if the server uses SSL to encrypt connections) </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00085">server.hpp:85</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a23766baf23b7b5be2e43da55547c3a31"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a23766baf23b7b5be2e43da55547c3a31">pion::tcp::server::after_stopping</a></div><div class="ttdeci">virtual void after_stopping(void)</div><div class="ttdoc">called after the TCP server has stopped listing for new connections </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00153">server.hpp:153</a></div></div>
<div class="ttc" id="namespacepion_html"><div class="ttname"><a href="namespacepion.html">pion</a></div><div class="ttdef"><b>Definition:</b> <a href="admin__rights_8hpp_source.html#l00019">admin_rights.hpp:19</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a0fd391b946961fca8604b902ddb06f7d"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a0fd391b946961fca8604b902ddb06f7d">pion::tcp::server::m_logger</a></div><div class="ttdeci">logger m_logger</div><div class="ttdoc">primary logging interface used by this class </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00160">server.hpp:160</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_aa711c8de12d16c2806dc5fe57bed512e"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#aa711c8de12d16c2806dc5fe57bed512e">pion::tcp::server::set_address</a></div><div class="ttdeci">void set_address(const boost::asio::ip::address &addr)</div><div class="ttdoc">sets IP address that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00073">server.hpp:73</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a392e9ede66cf2f96af52655363951e96"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a392e9ede66cf2f96af52655363951e96">pion::tcp::server::set_port</a></div><div class="ttdeci">void set_port(unsigned int p)</div><div class="ttdoc">sets tcp port number that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00067">server.hpp:67</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_af038c70801875d3d6a3826eb7a80b1c3"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#af038c70801875d3d6a3826eb7a80b1c3">pion::tcp::server::get_logger</a></div><div class="ttdeci">logger get_logger(void)</div><div class="ttdoc">returns the logger currently in use </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00097">server.hpp:97</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a728020c37ae9ec06197d01b195a24f9e"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a728020c37ae9ec06197d01b195a24f9e">pion::tcp::server::~server</a></div><div class="ttdeci">virtual ~server()</div><div class="ttdoc">default destructor </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00038">server.hpp:38</a></div></div>
<div class="ttc" id="classpion_1_1scheduler_html"><div class="ttname"><a href="classpion_1_1scheduler.html">pion::scheduler</a></div><div class="ttdef"><b>Definition:</b> <a href="scheduler_8hpp_source.html#l00034">scheduler.hpp:34</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.12
</small></address>
</body>
</html>
|