uvw/tcp_8hpp_source.html
2017-10-11 09:11:53 +02:00

102 lines
29 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.

<!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.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>uvw: src/uvw/tcp.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="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" />
</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">uvw
&#160;<span id="projectnumber">1.3.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</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');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- 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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_98934c98f70735fe3a272005a9eb8736.html">uvw</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">tcp.hpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;uv.h&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;request.hpp&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;stream.hpp&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;util.hpp&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceuvw.html">uvw</a> {</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">namespace </span>details {</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">enum class</span> UVTcpFlags: std::underlying_type_t&lt;uv_tcp_flags&gt; {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; IPV6ONLY = UV_TCP_IPV6ONLY</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;};</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;}</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html"> 45</a></span>&#160;<span class="keyword">class </span><a class="code" href="classuvw_1_1TcpHandle.html">TcpHandle</a> final: <span class="keyword">public</span> <a class="code" href="classuvw_1_1StreamHandle.html">StreamHandle</a>&lt;TcpHandle, uv_tcp_t&gt; {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">using</span> Time = std::chrono::duration&lt;unsigned int&gt;;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">using</span> Bind = details::UVTcpFlags;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">using</span> <a class="code" href="structuvw_1_1IPv4.html">IPv4</a> = <a class="code" href="structuvw_1_1IPv4.html">uvw::IPv4</a>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">using</span> <a class="code" href="structuvw_1_1IPv6.html">IPv6</a> = <a class="code" href="structuvw_1_1IPv6.html">uvw::IPv6</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classuvw_1_1TcpHandle.html">TcpHandle</a>(ConstructorAccess ca, std::shared_ptr&lt;Loop&gt; ref, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> f = {})</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; : <a class="code" href="classuvw_1_1StreamHandle.html">StreamHandle</a>{ca, std::move(ref)}, tag{f ? FLAGS : DEFAULT}, flags{f}</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {}</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#ac9b1d128b10dbb3be621823f9dae48e3"> 60</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classuvw_1_1TcpHandle.html#ac9b1d128b10dbb3be621823f9dae48e3">init</a>() {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> (tag == FLAGS)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; ? initialize(&amp;uv_tcp_init_ex, flags)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; : initialize(&amp;uv_tcp_init);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#aef58761c8fc6404e64b53ca188f899ec"> 74</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1TcpHandle.html#aef58761c8fc6404e64b53ca188f899ec">open</a>(<a class="code" href="namespaceuvw.html#a2df38e5bba10fc959ef37074cf580097">OSSocketHandle</a> socket) {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; invoke(&amp;uv_tcp_open, <span class="keyword">get</span>(), socket);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#a4e494c5cf91a5c223ef8d5ce88262457"> 83</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classuvw_1_1TcpHandle.html#a4e494c5cf91a5c223ef8d5ce88262457">noDelay</a>(<span class="keywordtype">bool</span> value = <span class="keyword">false</span>) {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> (0 == uv_tcp_nodelay(<span class="keyword">get</span>(), value));</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#ab1815761f0a6a2a641c9d5f6c297d33c"> 94</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classuvw_1_1TcpHandle.html#ab1815761f0a6a2a641c9d5f6c297d33c">keepAlive</a>(<span class="keywordtype">bool</span> enable = <span class="keyword">false</span>, Time time = Time{0}) {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">return</span> (0 == uv_tcp_keepalive(<span class="keyword">get</span>(), enable, time.count()));</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#a005b4643e2926b090a2585b48c7a387c"> 112</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classuvw_1_1TcpHandle.html#a005b4643e2926b090a2585b48c7a387c">simultaneousAccepts</a>(<span class="keywordtype">bool</span> enable = <span class="keyword">true</span>) {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">return</span> (0 == uv_tcp_simultaneous_accepts(<span class="keyword">get</span>(), enable));</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I = IPv4&gt;</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#a6f1aaf85110e2f1af6ea562313719163"> 134</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1TcpHandle.html#a6f1aaf85110e2f1af6ea562313719163">bind</a>(std::string ip, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> port, <a class="code" href="classuvw_1_1Flags.html">Flags&lt;Bind&gt;</a> opts = <a class="code" href="classuvw_1_1Flags.html">Flags&lt;Bind&gt;</a>{}) {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keyword">typename</span> details::IpTraits&lt;I&gt;::Type addr;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; details::IpTraits&lt;I&gt;::addrFunc(ip.data(), port, &amp;addr);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; invoke(&amp;uv_tcp_bind, <span class="keyword">get</span>(), reinterpret_cast&lt;const sockaddr *&gt;(&amp;addr), opts);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I = IPv4&gt;</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#a5bf82b9a34bc9a5c4dc3099d6960c80b"> 157</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1TcpHandle.html#a5bf82b9a34bc9a5c4dc3099d6960c80b">bind</a>(<a class="code" href="structuvw_1_1Addr.html">Addr</a> addr, <a class="code" href="classuvw_1_1Flags.html">Flags&lt;Bind&gt;</a> opts = <a class="code" href="classuvw_1_1Flags.html">Flags&lt;Bind&gt;</a>{}) {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; bind&lt;I&gt;(addr.<a class="code" href="structuvw_1_1Addr.html#a398a3805b87c8c2b64baf94cdc586fef">ip</a>, addr.<a class="code" href="structuvw_1_1Addr.html#a2069fc52d0ad91f65d76f558b8b7673f">port</a>, opts);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I = IPv4&gt;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#a4394e77b6edebdf38e76241e2f28f56e"> 166</a></span>&#160; <a class="code" href="structuvw_1_1Addr.html">Addr</a> <a class="code" href="classuvw_1_1TcpHandle.html#a4394e77b6edebdf38e76241e2f28f56e">sock</a>() const noexcept {</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">return</span> details::address&lt;I&gt;(&amp;uv_tcp_getsockname, <span class="keyword">get</span>());</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I = IPv4&gt;</div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#a0d1a767f0f6da7f32e492485f4adab1a"> 175</a></span>&#160; <a class="code" href="structuvw_1_1Addr.html">Addr</a> <a class="code" href="classuvw_1_1TcpHandle.html#a0d1a767f0f6da7f32e492485f4adab1a">peer</a>() const noexcept {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">return</span> details::address&lt;I&gt;(&amp;uv_tcp_getpeername, <span class="keyword">get</span>());</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I = IPv4&gt;</div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#abb2dcfd605fea355ab3c8a2dde74bb13"> 190</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1TcpHandle.html#abb2dcfd605fea355ab3c8a2dde74bb13">connect</a>(std::string ip, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> port) {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">typename</span> details::IpTraits&lt;I&gt;::Type addr;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; details::IpTraits&lt;I&gt;::addrFunc(ip.data(), port, &amp;addr);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">auto</span> listener = [ptr = shared_from_this()](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;event, <span class="keyword">const</span> <span class="keyword">auto</span> &amp;) {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; ptr-&gt;publish(event);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; };</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">auto</span> req = loop().resource&lt;details::ConnectReq&gt;();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; req-&gt;once&lt;<a class="code" href="structuvw_1_1ErrorEvent.html">ErrorEvent</a>&gt;(listener);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; req-&gt;once&lt;<a class="code" href="structuvw_1_1ConnectEvent.html">ConnectEvent</a>&gt;(listener);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; req-&gt;connect(&amp;uv_tcp_connect, <span class="keyword">get</span>(), reinterpret_cast&lt;const sockaddr *&gt;(&amp;addr));</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> I = IPv4&gt;</div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classuvw_1_1TcpHandle.html#a696d8ad1f20b5f48d72e47e9452ad8f3"> 214</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1TcpHandle.html#a696d8ad1f20b5f48d72e47e9452ad8f3">connect</a>(<a class="code" href="structuvw_1_1Addr.html">Addr</a> addr) {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; connect&lt;I&gt;(addr.<a class="code" href="structuvw_1_1Addr.html#a398a3805b87c8c2b64baf94cdc586fef">ip</a>, addr.<a class="code" href="structuvw_1_1Addr.html#a2069fc52d0ad91f65d76f558b8b7673f">port</a>);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keyword">enum</span> { DEFAULT, FLAGS } tag;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;};</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;}</div><div class="ttc" id="structuvw_1_1Addr_html"><div class="ttname"><a href="structuvw_1_1Addr.html">uvw::Addr</a></div><div class="ttdoc">Address representation. </div><div class="ttdef"><b>Definition:</b> <a href="util_8hpp_source.html#l00286">util.hpp:286</a></div></div>
<div class="ttc" id="structuvw_1_1Addr_html_a2069fc52d0ad91f65d76f558b8b7673f"><div class="ttname"><a href="structuvw_1_1Addr.html#a2069fc52d0ad91f65d76f558b8b7673f">uvw::Addr::port</a></div><div class="ttdeci">unsigned int port</div><div class="ttdef"><b>Definition:</b> <a href="util_8hpp_source.html#l00288">util.hpp:288</a></div></div>
<div class="ttc" id="structuvw_1_1Addr_html_a398a3805b87c8c2b64baf94cdc586fef"><div class="ttname"><a href="structuvw_1_1Addr.html#a398a3805b87c8c2b64baf94cdc586fef">uvw::Addr::ip</a></div><div class="ttdeci">std::string ip</div><div class="ttdef"><b>Definition:</b> <a href="util_8hpp_source.html#l00287">util.hpp:287</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_a6f1aaf85110e2f1af6ea562313719163"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#a6f1aaf85110e2f1af6ea562313719163">uvw::TcpHandle::bind</a></div><div class="ttdeci">void bind(std::string ip, unsigned int port, Flags&lt; Bind &gt; opts=Flags&lt; Bind &gt;{})</div><div class="ttdoc">Binds the handle to an address and port. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00134">tcp.hpp:134</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_abb2dcfd605fea355ab3c8a2dde74bb13"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#abb2dcfd605fea355ab3c8a2dde74bb13">uvw::TcpHandle::connect</a></div><div class="ttdeci">void connect(std::string ip, unsigned int port)</div><div class="ttdoc">Establishes an IPv4 or IPv6 TCP connection. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00190">tcp.hpp:190</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_a696d8ad1f20b5f48d72e47e9452ad8f3"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#a696d8ad1f20b5f48d72e47e9452ad8f3">uvw::TcpHandle::connect</a></div><div class="ttdeci">void connect(Addr addr)</div><div class="ttdoc">Establishes an IPv4 or IPv6 TCP connection. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00214">tcp.hpp:214</a></div></div>
<div class="ttc" id="classuvw_1_1Flags_html"><div class="ttname"><a href="classuvw_1_1Flags.html">uvw::Flags</a></div><div class="ttdoc">Utility class to handle flags. </div><div class="ttdef"><b>Definition:</b> <a href="util_8hpp_source.html#l00077">util.hpp:77</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_a0d1a767f0f6da7f32e492485f4adab1a"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#a0d1a767f0f6da7f32e492485f4adab1a">uvw::TcpHandle::peer</a></div><div class="ttdeci">Addr peer() const noexcept</div><div class="ttdoc">Gets the address of the peer connected to the handle. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00175">tcp.hpp:175</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_a4394e77b6edebdf38e76241e2f28f56e"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#a4394e77b6edebdf38e76241e2f28f56e">uvw::TcpHandle::sock</a></div><div class="ttdeci">Addr sock() const noexcept</div><div class="ttdoc">Gets the current address to which the handle is bound. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00166">tcp.hpp:166</a></div></div>
<div class="ttc" id="structuvw_1_1ConnectEvent_html"><div class="ttname"><a href="structuvw_1_1ConnectEvent.html">uvw::ConnectEvent</a></div><div class="ttdoc">ConnectEvent event. </div><div class="ttdef"><b>Definition:</b> <a href="stream_8hpp_source.html#l00023">stream.hpp:23</a></div></div>
<div class="ttc" id="classuvw_1_1StreamHandle_html"><div class="ttname"><a href="classuvw_1_1StreamHandle.html">uvw::StreamHandle</a></div><div class="ttdoc">The StreamHandle handle. </div><div class="ttdef"><b>Definition:</b> <a href="stream_8hpp_source.html#l00130">stream.hpp:130</a></div></div>
<div class="ttc" id="structuvw_1_1IPv6_html"><div class="ttname"><a href="structuvw_1_1IPv6.html">uvw::IPv6</a></div><div class="ttdoc">The IPv6 tag. </div><div class="ttdef"><b>Definition:</b> <a href="util_8hpp_source.html#l00280">util.hpp:280</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html"><div class="ttname"><a href="classuvw_1_1TcpHandle.html">uvw::TcpHandle</a></div><div class="ttdoc">The TcpHandle handle. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00045">tcp.hpp:45</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_ac9b1d128b10dbb3be621823f9dae48e3"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#ac9b1d128b10dbb3be621823f9dae48e3">uvw::TcpHandle::init</a></div><div class="ttdeci">bool init()</div><div class="ttdoc">Initializes the handle. No socket is created as of yet. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00060">tcp.hpp:60</a></div></div>
<div class="ttc" id="structuvw_1_1ErrorEvent_html"><div class="ttname"><a href="structuvw_1_1ErrorEvent.html">uvw::ErrorEvent</a></div><div class="ttdoc">The ErrorEvent event. </div><div class="ttdef"><b>Definition:</b> <a href="emitter_8hpp_source.html#l00023">emitter.hpp:23</a></div></div>
<div class="ttc" id="namespaceuvw_html_a2df38e5bba10fc959ef37074cf580097"><div class="ttname"><a href="namespaceuvw.html#a2df38e5bba10fc959ef37074cf580097">uvw::OSSocketHandle</a></div><div class="ttdeci">details::UVTypeWrapper&lt; uv_os_sock_t &gt; OSSocketHandle</div><div class="ttdef"><b>Definition:</b> <a href="util_8hpp_source.html#l00187">util.hpp:187</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_ab1815761f0a6a2a641c9d5f6c297d33c"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#ab1815761f0a6a2a641c9d5f6c297d33c">uvw::TcpHandle::keepAlive</a></div><div class="ttdeci">bool keepAlive(bool enable=false, Time time=Time{0})</div><div class="ttdoc">Enables/Disables TCP keep-alive. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00094">tcp.hpp:94</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_a4e494c5cf91a5c223ef8d5ce88262457"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#a4e494c5cf91a5c223ef8d5ce88262457">uvw::TcpHandle::noDelay</a></div><div class="ttdeci">bool noDelay(bool value=false)</div><div class="ttdoc">Enables/Disables Nagles algorithm. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00083">tcp.hpp:83</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_a5bf82b9a34bc9a5c4dc3099d6960c80b"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#a5bf82b9a34bc9a5c4dc3099d6960c80b">uvw::TcpHandle::bind</a></div><div class="ttdeci">void bind(Addr addr, Flags&lt; Bind &gt; opts=Flags&lt; Bind &gt;{})</div><div class="ttdoc">Binds the handle to an address and port. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00157">tcp.hpp:157</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_a005b4643e2926b090a2585b48c7a387c"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#a005b4643e2926b090a2585b48c7a387c">uvw::TcpHandle::simultaneousAccepts</a></div><div class="ttdeci">bool simultaneousAccepts(bool enable=true)</div><div class="ttdoc">Enables/Disables simultaneous asynchronous accept requests. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00112">tcp.hpp:112</a></div></div>
<div class="ttc" id="classuvw_1_1TcpHandle_html_aef58761c8fc6404e64b53ca188f899ec"><div class="ttname"><a href="classuvw_1_1TcpHandle.html#aef58761c8fc6404e64b53ca188f899ec">uvw::TcpHandle::open</a></div><div class="ttdeci">void open(OSSocketHandle socket)</div><div class="ttdoc">Opens an existing file descriptor or SOCKET as a TCP handle. </div><div class="ttdef"><b>Definition:</b> <a href="tcp_8hpp_source.html#l00074">tcp.hpp:74</a></div></div>
<div class="ttc" id="structuvw_1_1IPv4_html"><div class="ttname"><a href="structuvw_1_1IPv4.html">uvw::IPv4</a></div><div class="ttdoc">The IPv4 tag. </div><div class="ttdef"><b>Definition:</b> <a href="util_8hpp_source.html#l00272">util.hpp:272</a></div></div>
<div class="ttc" id="namespaceuvw_html"><div class="ttname"><a href="namespaceuvw.html">uvw</a></div><div class="ttdoc">uvw default namespace. </div><div class="ttdef"><b>Definition:</b> <a href="async_8hpp_source.html#l00011">async.hpp:11</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>