dash-docs/en/doxygen/html/net_8cpp_source.html

637 lines
716 KiB
HTML

<!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.14"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Dash Core: src/net.cpp 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="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(initResizable);
/* @license-end */</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="projectlogo"><img alt="Logo" src="bitcoin_logo_doxygen.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Dash Core
&#160;<span id="projectnumber">0.12.2.1</span>
</div>
<div id="projectbrief">P2P Digital Currency</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('net_8cpp_source.html','');});
/* @license-end */
</script>
<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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">net.cpp</div> </div>
</div><!--header-->
<div class="contents">
<a href="net_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2009-2010 Satoshi Nakamoto</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// Copyright (c) 2009-2015 The Bitcoin Core developers</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (c) 2014-2017 The Dash Core developers</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT software license, see the accompanying</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// file COPYING or http://www.opensource.org/licenses/mit-license.php.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#if defined(HAVE_CONFIG_H)</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="dash-config_8h.html">config/dash-config.h</a>&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="net_8h.html">net.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="addrman_8h.html">addrman.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="chainparams_8h.html">chainparams.h</a>&quot;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="clientversion_8h.html">clientversion.h</a>&quot;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="consensus_8h.html">consensus/consensus.h</a>&quot;</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="common_8h.html">crypto/common.h</a>&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="hash_8h.html">hash.h</a>&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="transaction_8h.html">primitives/transaction.h</a>&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="netbase_8h.html">netbase.h</a>&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="scheduler_8h.html">scheduler.h</a>&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ui__interface_8h.html">ui_interface.h</a>&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="wallet_8h.html">wallet/wallet.h</a>&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="utilstrencodings_8h.html">utilstrencodings.h</a>&quot;</span></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;<span class="preprocessor">#include &quot;<a class="code" href="instantx_8h.html">instantx.h</a>&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="masternode-sync_8h.html">masternode-sync.h</a>&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="masternodeman_8h.html">masternodeman.h</a>&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="privatesend_8h.html">privatesend.h</a>&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#ifdef USE_UPNP</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &lt;miniupnpc/miniupnpc.h&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;miniupnpc/miniwget.h&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;miniupnpc/upnpcommands.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &lt;miniupnpc/upnperrors.h&gt;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &lt;math.h&gt;</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment">// Dump addresses to peers.dat and banlist.dat every 15 minutes (900s)</span></div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="net_8cpp.html#a272e900bb201601d6842e465bec135af"> 48</a></span>&#160;<span class="preprocessor">#define DUMP_ADDRESSES_INTERVAL 900</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">// We add a random period time (0 to 1 seconds) to feeler connections to prevent synchronization.</span></div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="net_8cpp.html#ac81652eef8570cad19735e421f756c64"> 51</a></span>&#160;<span class="preprocessor">#define FEELER_SLEEP_WINDOW 1</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#if !defined(HAVE_MSG_NOSIGNAL) &amp;&amp; !defined(MSG_NOSIGNAL)</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#define MSG_NOSIGNAL 0</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">// Fix for ancient MinGW versions, that don&#39;t have defined these in ws2tcpip.h.</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">// Todo: Can be removed when our pull-tester is upgraded to a modern MinGW version.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#ifndef PROTECTION_LEVEL_UNRESTRICTED</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#define PROTECTION_LEVEL_UNRESTRICTED 10</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#ifndef IPV6_PROTECTION_LEVEL</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="preprocessor">#define IPV6_PROTECTION_LEVEL 23</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="net_8cpp.html#a6dfc4be12d34c83608661113ac3693fc"> 68</a></span>&#160;<span class="keyword">const</span> <span class="keyword">static</span> std::string <a class="code" href="net_8cpp.html#a6dfc4be12d34c83608661113ac3693fc">NET_MESSAGE_COMMAND_OTHER</a> = <span class="stringliteral">&quot;*other*&quot;</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;constexpr <span class="keyword">const</span> <a class="code" href="structCConnman_1_1CFullyConnectedOnly.html">CConnman::CFullyConnectedOnly</a> <a class="code" href="classCConnman.html#ada03158efc97507ad867bcf12e379952">CConnman::FullyConnectedOnly</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;constexpr <span class="keyword">const</span> <a class="code" href="structCConnman_1_1CAllNodes.html">CConnman::CAllNodes</a> <a class="code" href="classCConnman.html#a81ee60dee3278cf33319ab0c02c239bd">CConnman::AllNodes</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// Global state variables</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="net_8h.html#a37089835ec27ad8bf945a458708165b9"> 76</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a37089835ec27ad8bf945a458708165b9">fDiscover</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="net_8h.html#a5067f8b9215406011fa3461be92d819c"> 77</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a5067f8b9215406011fa3461be92d819c">fListen</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="net_8h.html#a7935254c613d6f3cdadd3ce45f7efbff"> 78</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a7935254c613d6f3cdadd3ce45f7efbff">fRelayTxes</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="net_8h.html#a62111271618110807cc534e55c13cb70"> 79</a></span>&#160;<a class="code" href="classAnnotatedMixin.html">CCriticalSection</a> <a class="code" href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a>;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="net_8h.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79"> 80</a></span>&#160;std::map&lt;CNetAddr, LocalServiceInfo&gt; <a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="net_8cpp.html#a5e487e1c7c859212aa23f8707096a8a4"> 81</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a5e487e1c7c859212aa23f8707096a8a4">vfLimited</a>[<a class="code" href="netaddress_8h.html#acc9a38c714afe79b5035cb36f560dac3a675b0737d6c404a5de25e324c166a4b5">NET_MAX</a>] = {};</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="net_8cpp.html#a1e6c74cfb67940ce1cf68ac2b2934011"> 82</a></span>&#160;<span class="keyword">static</span> <a class="code" href="classCNode.html">CNode</a>* <a class="code" href="net_8cpp.html#a1e6c74cfb67940ce1cf68ac2b2934011">pnodeLocalHost</a> = NULL;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="net_8h.html#a6c58f8ccc4c93105a44caf588562d609"> 83</a></span>&#160;std::string <a class="code" href="net_8cpp.html#a6c58f8ccc4c93105a44caf588562d609">strSubVersion</a>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="net_8h.html#adb45ec1b7c89fd811f480182f45ec546"> 85</a></span>&#160;std::map&lt;CInv, CDataStream&gt; <a class="code" href="net_8cpp.html#adb45ec1b7c89fd811f480182f45ec546">mapRelay</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="net_8h.html#a43e845269f2b18e20dfcb7ece6832a2e"> 86</a></span>&#160;std::deque&lt;pair&lt;int64_t, CInv&gt; &gt; <a class="code" href="net_8cpp.html#a57df927b0cbc3f797a858aa2625aeb20">vRelayExpiration</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="net_8h.html#ae1ed86ae54e13fe5f0ae1c12e48e3a0e"> 87</a></span>&#160;<a class="code" href="classAnnotatedMixin.html">CCriticalSection</a> <a class="code" href="net_8cpp.html#ae1ed86ae54e13fe5f0ae1c12e48e3a0e">cs_mapRelay</a>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<a class="code" href="classlimitedmap.html">limitedmap&lt;uint256, int64_t&gt;</a> <a class="code" href="net_8cpp.html#a0df0c10706c3d7255fd1d57a899ad9f2">mapAlreadyAskedFor</a>(<a class="code" href="net_8h.html#af677dfc85dddc429fe0303f338878ec0">MAX_INV_SZ</a>);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment">// Signals for message handling</span></div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="net_8cpp.html#a3b026e51b0bac81a09fd11694d8a5674"> 91</a></span>&#160;<span class="keyword">static</span> <a class="code" href="structCNodeSignals.html">CNodeSignals</a> <a class="code" href="net_8cpp.html#a3b026e51b0bac81a09fd11694d8a5674">g_signals</a>;</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="net_8h.html#a475f2fc7d8f5cd7511db253cae8fe28a"> 92</a></span>&#160;<a class="code" href="structCNodeSignals.html">CNodeSignals</a>&amp; <a class="code" href="net_8cpp.html#a475f2fc7d8f5cd7511db253cae8fe28a">GetNodeSignals</a>() { <span class="keywordflow">return</span> <a class="code" href="net_8cpp.html#a3b026e51b0bac81a09fd11694d8a5674">g_signals</a>; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classCConnman.html#afaf3119a1d1212256aa6f4b5763c29ca"> 94</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#afaf3119a1d1212256aa6f4b5763c29ca">CConnman::AddOneShot</a>(<span class="keyword">const</span> std::string&amp; strDest)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#aedb5dff92cf5677c8465bb8ad43312e4">cs_vOneShots</a>);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classCConnman.html#a59b3f6615a4e566b34920b6fbb747920">vOneShots</a>.push_back(strDest);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="net_8h.html#af6d341a24d761a509fca026458cf2f72"> 100</a></span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="net_8cpp.html#af6d341a24d761a509fca026458cf2f72">GetListenPort</a>()</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;{</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)(<a class="code" href="util_8cpp.html#a24f685720bf40370e5bd2a192ad50cd8">GetArg</a>(<span class="stringliteral">&quot;-port&quot;</span>, <a class="code" href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a>().GetDefaultPort()));</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment">// find &#39;best&#39; local address for a particular peer</span></div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="net_8h.html#ac18517ca5500f0d8e1550ffd4ac56b77"> 106</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a51605827c953a7843f9b165eada26857">GetLocal</a>(<a class="code" href="classCService.html">CService</a>&amp; addr, <span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a> *paddrPeer)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;{</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="net_8cpp.html#a5067f8b9215406011fa3461be92d819c">fListen</a>)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordtype">int</span> nBestScore = -1;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">int</span> nBestReachability = -1;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a>);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">for</span> (std::map&lt;CNetAddr, LocalServiceInfo&gt;::iterator it = <a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>.begin(); it != <a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>.end(); it++)</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordtype">int</span> nScore = (*it).second.nScore;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordtype">int</span> nReachability = (*it).first.GetReachabilityFrom(paddrPeer);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span> (nReachability &gt; nBestReachability || (nReachability == nBestReachability &amp;&amp; nScore &gt; nBestScore))</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; addr = <a class="code" href="classCService.html">CService</a>((*it).first, (*it).second.nPort);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; nBestReachability = nReachability;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; nBestScore = nScore;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">return</span> nBestScore &gt;= 0;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;}</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="net_8cpp.html#ae0d0a697455bede4a91f09af856e9146"> 131</a></span>&#160;<span class="keyword">static</span> std::vector&lt;CAddress&gt; <a class="code" href="net_8cpp.html#ae0d0a697455bede4a91f09af856e9146">convertSeed6</a>(<span class="keyword">const</span> std::vector&lt;SeedSpec6&gt; &amp;vSeedsIn)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// It&#39;ll only connect to one or two seed nodes because once it connects,</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="comment">// it&#39;ll get a pile of addresses with newer timestamps.</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="comment">// Seed nodes are given a random &#39;last seen time&#39; of between one and two</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// weeks ago.</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">const</span> int64_t nOneWeek = 7*24*60*60;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; std::vector&lt;CAddress&gt; vSeedsOut;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; vSeedsOut.reserve(vSeedsIn.size());</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">for</span> (std::vector&lt;SeedSpec6&gt;::const_iterator i(vSeedsIn.begin()); i != vSeedsIn.end(); ++i)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">struct </span>in6_addr ip;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="glibc__compat_8cpp.html#a0f46826ab0466591e136db24394923cf">memcpy</a>(&amp;ip, i-&gt;addr, <span class="keyword">sizeof</span>(ip));</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="classCAddress.html">CAddress</a> addr(<a class="code" href="classCService.html">CService</a>(ip, i-&gt;port), <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537a9d1154f0e7e56f183a5c8373abe2e86c">NODE_NETWORK</a>);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; addr.<a class="code" href="classCAddress.html#ac1c44aac968b11f90ce529b133ae4e9b">nTime</a> = <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>() - <a class="code" href="random_8cpp.html#a27d9149d522b1fa87d84e5e9ca902aef">GetRand</a>(nOneWeek) - nOneWeek;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; vSeedsOut.push_back(addr);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">return</span> vSeedsOut;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;}</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment">// get best local address for a particular peer as a CAddress</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">// Otherwise, return the unroutable 0.0.0.0 but filled in with</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment">// the normal parameters, since the IP may be changed to a useful</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment">// one by discovery.</span></div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="net_8h.html#a01304c8caa7997b48da307d19d1d284a"> 155</a></span>&#160;<a class="code" href="classCAddress.html">CAddress</a> <a class="code" href="net_8cpp.html#a01304c8caa7997b48da307d19d1d284a">GetLocalAddress</a>(<span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a> *paddrPeer, <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537">ServiceFlags</a> nLocalServices)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="classCAddress.html">CAddress</a> ret(<a class="code" href="classCService.html">CService</a>(<a class="code" href="classCNetAddr.html">CNetAddr</a>(),<a class="code" href="net_8cpp.html#af6d341a24d761a509fca026458cf2f72">GetListenPort</a>()), <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537a51f819cd0b9ac374d6950a29b4861398">NODE_NONE</a>);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="classCService.html">CService</a> addr;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a51605827c953a7843f9b165eada26857">GetLocal</a>(addr, paddrPeer))</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; ret = <a class="code" href="classCAddress.html">CAddress</a>(addr, nLocalServices);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; ret.<a class="code" href="classCAddress.html#ac1c44aac968b11f90ce529b133ae4e9b">nTime</a> = <a class="code" href="timedata_8cpp.html#a09f81b9c7650f898cf3cf305b87547e6">GetAdjustedTime</a>();</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="net_8cpp.html#afa6b10687ddaa84fa7ba65b83ad1f069"> 167</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="net_8cpp.html#afa6b10687ddaa84fa7ba65b83ad1f069">GetnScore</a>(<span class="keyword">const</span> <a class="code" href="classCService.html">CService</a>&amp; addr)</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; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>.count(addr) == <a class="code" href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035da1d33b76bcbc0dbb757cc02bb2259775b">LOCAL_NONE</a>)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">return</span> <a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>[addr].nScore;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;}</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment">// Is our peer&#39;s addrLocal potentially useful as an external IP source?</span></div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="net_8h.html#a058b75c6fcc94a0643184c237ad6de93"> 176</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a058b75c6fcc94a0643184c237ad6de93">IsPeerAddrLocalGood</a>(<a class="code" href="classCNode.html">CNode</a> *pnode)</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; <span class="keywordflow">return</span> <a class="code" href="net_8cpp.html#a37089835ec27ad8bf945a458708165b9">fDiscover</a> &amp;&amp; pnode-&gt;<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a>.<a class="code" href="classCNetAddr.html#a4e3b2fea2a6151c76684b3812df4a5c3">IsRoutable</a>() &amp;&amp; pnode-&gt;<a class="code" href="classCNode.html#a1b6517682efa0709f44780a95384c4ec">addrLocal</a>.<a class="code" href="classCNetAddr.html#a4e3b2fea2a6151c76684b3812df4a5c3">IsRoutable</a>() &amp;&amp;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; !<a class="code" href="net_8cpp.html#a96eb2fba6d80870802ac787b6ada4beb">IsLimited</a>(pnode-&gt;<a class="code" href="classCNode.html#a1b6517682efa0709f44780a95384c4ec">addrLocal</a>.<a class="code" href="classCNetAddr.html#ad0162f2629f552a65acf934e1629c1db">GetNetwork</a>());</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;}</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment">// pushes our own address to a peer</span></div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="net_8h.html#a0cde2b3256757536c42c0bd3037847d1"> 183</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="net_8cpp.html#a0cde2b3256757536c42c0bd3037847d1">AdvertiseLocal</a>(<a class="code" href="classCNode.html">CNode</a> *pnode)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;{</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a5067f8b9215406011fa3461be92d819c">fListen</a> &amp;&amp; pnode-&gt;<a class="code" href="classCNode.html#a359647a8e7ad1fc72243b126b35729b6">fSuccessfullyConnected</a>)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classCAddress.html">CAddress</a> addrLocal = <a class="code" href="net_8cpp.html#a01304c8caa7997b48da307d19d1d284a">GetLocalAddress</a>(&amp;pnode-&gt;<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a>, pnode-&gt;<a class="code" href="classCNode.html#aaa7ed919e1ed445dd9589b984231ba46">GetLocalServices</a>());</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">// If discovery is enabled, sometimes give our peer the address it</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// tells us that it sees us as in case it has a better idea of our</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// address than we do.</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a058b75c6fcc94a0643184c237ad6de93">IsPeerAddrLocalGood</a>(pnode) &amp;&amp; (!addrLocal.<a class="code" href="classCNetAddr.html#a4e3b2fea2a6151c76684b3812df4a5c3">IsRoutable</a>() ||</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="random_8cpp.html#a27d9149d522b1fa87d84e5e9ca902aef">GetRand</a>((<a class="code" href="net_8cpp.html#afa6b10687ddaa84fa7ba65b83ad1f069">GetnScore</a>(addrLocal) &gt; <a class="code" href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035da85f937846a9820dce1ac928efee52a91">LOCAL_MANUAL</a>) ? 8:2) == 0))</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; addrLocal.<a class="code" href="classCNetAddr.html#a1c6087345e5ca07a151451cd6deb974f">SetIP</a>(pnode-&gt;<a class="code" href="classCNode.html#a1b6517682efa0709f44780a95384c4ec">addrLocal</a>);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">if</span> (addrLocal.<a class="code" href="classCNetAddr.html#a4e3b2fea2a6151c76684b3812df4a5c3">IsRoutable</a>())</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; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;AdvertiseLocal: advertising address %s\n&quot;</span>, addrLocal.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>());</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a06950a5ce265a1d4df1aad7f28e6fde8">PushAddress</a>(addrLocal);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</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="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment">// learn a new local address</span></div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="net_8h.html#a337d6af198a6b0d75f830e56da9b91e9"> 205</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#abb92a02eecc581e8927c8a6e31968645">AddLocal</a>(<span class="keyword">const</span> <a class="code" href="classCService.html">CService</a>&amp; addr, <span class="keywordtype">int</span> nScore)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;{</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span> (!addr.<a class="code" href="classCNetAddr.html#a4e3b2fea2a6151c76684b3812df4a5c3">IsRoutable</a>())</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="net_8cpp.html#a37089835ec27ad8bf945a458708165b9">fDiscover</a> &amp;&amp; nScore &lt; <a class="code" href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035da85f937846a9820dce1ac928efee52a91">LOCAL_MANUAL</a>)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a96eb2fba6d80870802ac787b6ada4beb">IsLimited</a>(addr))</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;AddLocal(%s,%i)\n&quot;</span>, addr.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>(), nScore);</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; {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a>);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordtype">bool</span> fAlready = <a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>.count(addr) &gt; 0;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="structLocalServiceInfo.html">LocalServiceInfo</a> &amp;info = <a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>[addr];</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (!fAlready || nScore &gt;= info.<a class="code" href="structLocalServiceInfo.html#ad6a9d404fb109ba1506df3f6ca842ed5">nScore</a>) {</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; info.<a class="code" href="structLocalServiceInfo.html#ad6a9d404fb109ba1506df3f6ca842ed5">nScore</a> = nScore + (fAlready ? 1 : 0);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; info.<a class="code" href="structLocalServiceInfo.html#aa5c39fec8cc69a43e393bb158f69224b">nPort</a> = addr.<a class="code" href="classCService.html#a71caa0d6aa6ab12758bde8b6a6bcfd2a">GetPort</a>();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;}</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="net_8h.html#abda4e8f87772f9a9d9d8f52a93791ffc"> 231</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#abb92a02eecc581e8927c8a6e31968645">AddLocal</a>(<span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a> &amp;addr, <span class="keywordtype">int</span> nScore)</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;{</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">return</span> <a class="code" href="net_8cpp.html#abb92a02eecc581e8927c8a6e31968645">AddLocal</a>(<a class="code" href="classCService.html">CService</a>(addr, <a class="code" href="net_8cpp.html#af6d341a24d761a509fca026458cf2f72">GetListenPort</a>()), nScore);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;}</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="net_8h.html#a040c40f60af5f50a128fc1aac4cb5ebd"> 236</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a040c40f60af5f50a128fc1aac4cb5ebd">RemoveLocal</a>(<span class="keyword">const</span> <a class="code" href="classCService.html">CService</a>&amp; addr)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;{</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a>);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;RemoveLocal(%s)\n&quot;</span>, addr.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>());</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>.erase(addr);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;}</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="net_8h.html#ae2dce03e604687e4029cdd759eba1ee0"> 245</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="net_8cpp.html#a2f6d62a9d456bf38003df3815b707f46">SetLimited</a>(<span class="keyword">enum</span> <a class="code" href="netaddress_8h.html#acc9a38c714afe79b5035cb36f560dac3">Network</a> net, <span class="keywordtype">bool</span> fLimited)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">if</span> (net == <a class="code" href="netaddress_8h.html#acc9a38c714afe79b5035cb36f560dac3af66f60a80e2a5d99813c3f322cf8a6e1">NET_UNROUTABLE</a>)</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a>);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="net_8cpp.html#a5e487e1c7c859212aa23f8707096a8a4">vfLimited</a>[net] = fLimited;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;}</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="net_8h.html#a96eb2fba6d80870802ac787b6ada4beb"> 253</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a96eb2fba6d80870802ac787b6ada4beb">IsLimited</a>(<span class="keyword">enum</span> <a class="code" href="netaddress_8h.html#acc9a38c714afe79b5035cb36f560dac3">Network</a> net)</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;{</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a>);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">return</span> <a class="code" href="net_8cpp.html#a5e487e1c7c859212aa23f8707096a8a4">vfLimited</a>[net];</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;}</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="net_8h.html#a7f5f5a0bf934e49c7137ee4aa6eb8732"> 259</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a96eb2fba6d80870802ac787b6ada4beb">IsLimited</a>(<span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a> &amp;addr)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;{</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">return</span> <a class="code" href="net_8cpp.html#a96eb2fba6d80870802ac787b6ada4beb">IsLimited</a>(addr.<a class="code" href="classCNetAddr.html#ad0162f2629f552a65acf934e1629c1db">GetNetwork</a>());</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;}</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="net_8h.html#af7487aacfc9d708b3db40c255ec070a8"> 265</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#af7487aacfc9d708b3db40c255ec070a8">SeenLocal</a>(<span class="keyword">const</span> <a class="code" href="classCService.html">CService</a>&amp; addr)</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;{</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a>);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>.count(addr) == 0)</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>[addr].nScore++;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;}</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="net_8h.html#a16fa1bd4d34c4c29c90903fc3cdf7517"> 278</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a16fa1bd4d34c4c29c90903fc3cdf7517">IsLocal</a>(<span class="keyword">const</span> <a class="code" href="classCService.html">CService</a>&amp; addr)</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;{</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a>);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">return</span> <a class="code" href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a>.count(addr) &gt; 0;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;}</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="net_8h.html#af6de8e47b01a96206402ddef734114f2"> 285</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#af6de8e47b01a96206402ddef734114f2">IsReachable</a>(<span class="keyword">enum</span> <a class="code" href="netaddress_8h.html#acc9a38c714afe79b5035cb36f560dac3">Network</a> net)</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;{</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a>);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">return</span> !<a class="code" href="net_8cpp.html#a5e487e1c7c859212aa23f8707096a8a4">vfLimited</a>[net];</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;}</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="net_8h.html#a0eb7db987ad1a1bf139d0cd46873ed29"> 292</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#af6de8e47b01a96206402ddef734114f2">IsReachable</a>(<span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a>&amp; addr)</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">enum</span> <a class="code" href="netaddress_8h.html#acc9a38c714afe79b5035cb36f560dac3">Network</a> net = addr.<a class="code" href="classCNetAddr.html#ad0162f2629f552a65acf934e1629c1db">GetNetwork</a>();</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">return</span> <a class="code" href="net_8cpp.html#af6de8e47b01a96206402ddef734114f2">IsReachable</a>(net);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;}</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;std::vector&lt;unsigned char&gt; <a class="code" href="classCNode.html#a036eeb2db08357a540cd23045a47d17a">CNode::vchSecretKey</a>;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e"> 301</a></span>&#160;<a class="code" href="classCNode.html">CNode</a>* <a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">CConnman::FindNode</a>(<span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a>&amp; ip)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;{</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span> ((<a class="code" href="classCNetAddr.html">CNetAddr</a>)pnode-&gt;<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a> == ip)</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> (pnode);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classCConnman.html#afe1269cf57a859dfc0869c8b5f417ea9"> 310</a></span>&#160;<a class="code" href="classCNode.html">CNode</a>* <a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">CConnman::FindNode</a>(<span class="keyword">const</span> <a class="code" href="classCSubNet.html">CSubNet</a>&amp; subNet)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;{</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>)</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span> (subNet.<a class="code" href="classCSubNet.html#af84fa02ebca222739c55e9d2cd7d38a3">Match</a>((<a class="code" href="classCNetAddr.html">CNetAddr</a>)pnode-&gt;<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a>))</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">return</span> (pnode);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;}</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno"><a class="line" href="classCConnman.html#a32f7f4810ac928e399dc8f83c32d433b"> 319</a></span>&#160;<a class="code" href="classCNode.html">CNode</a>* <a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">CConnman::FindNode</a>(<span class="keyword">const</span> std::string&amp; addrName)</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;{</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>)</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a3155cd313d85ec3ff691f8259a5f5345">addrName</a> == addrName)</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span> (pnode);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;}</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classCConnman.html#a12b3642b5394db03c9c1af37ac43750f"> 328</a></span>&#160;<a class="code" href="classCNode.html">CNode</a>* <a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">CConnman::FindNode</a>(<span class="keyword">const</span> <a class="code" href="classCService.html">CService</a>&amp; addr)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>)</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span>((<a class="code" href="classCService.html">CService</a>)pnode-&gt;<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a> == addr)</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> (pnode);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;}</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classCConnman.html#ac95687bc3457cbc25a78abcc2a5cc7fc"> 337</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#ac95687bc3457cbc25a78abcc2a5cc7fc">CConnman::CheckIncomingNonce</a>(uint64_t nonce)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;{</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>) {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">if</span> (!pnode-&gt;<a class="code" href="classCNode.html#a359647a8e7ad1fc72243b126b35729b6">fSuccessfullyConnected</a> &amp;&amp; !pnode-&gt;<a class="code" href="classCNode.html#a64b2550ec558b6106ebc122d450ad35b">fInbound</a> &amp;&amp; pnode-&gt;<a class="code" href="classCNode.html#a3c5bbe8733398b4d14ce05d30aced57e">GetLocalNonce</a>() == nonce)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;}</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="classCConnman.html#a3b31c247f9fc1c0f0d4e5f3482c667b3"> 347</a></span>&#160;<a class="code" href="classCNode.html">CNode</a>* <a class="code" href="classCConnman.html#a3b31c247f9fc1c0f0d4e5f3482c667b3">CConnman::ConnectNode</a>(<a class="code" href="classCAddress.html">CAddress</a> addrConnect, <span class="keyword">const</span> <span class="keywordtype">char</span> *pszDest, <span class="keywordtype">bool</span> fConnectToMasternode)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;{</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// TODO: This is different from what we have in Bitcoin which only calls ConnectNode from OpenNetworkConnection</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="comment">// If we ever switch to using OpenNetworkConnection for MNs as well, this can be removed</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a57501169f1faf1750efc6158f825b531">fNetworkActive</a>) {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (pszDest == NULL) {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// we clean masternode connections in CMasternodeMan::ProcessMasternodeConnections()</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// so should be safe to skip this and connect to local Hot MN on CActiveMasternode::ManageState()</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a16fa1bd4d34c4c29c90903fc3cdf7517">IsLocal</a>(addrConnect) &amp;&amp; !fConnectToMasternode)</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="comment">// Look for an existing connection</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="classCNode.html">CNode</a>* pnode = <a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">FindNode</a>((<a class="code" href="classCService.html">CService</a>)addrConnect);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">if</span> (pnode)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// we have existing connection to this node but it was not a connection to masternode,</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="comment">// change flag and add reference so that we can correctly clear it later</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">if</span>(fConnectToMasternode &amp;&amp; !pnode-&gt;<a class="code" href="classCNode.html#a119824dcaebcd3c8e272a68f19a60c43">fMasternode</a>) {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#afb65ed679f7bda59aab89e0f5afae292">AddRef</a>();</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a119824dcaebcd3c8e272a68f19a60c43">fMasternode</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">return</span> pnode;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;trying connection %s lastseen=%.1fhrs\n&quot;</span>,</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; pszDest ? pszDest : addrConnect.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>(),</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; pszDest ? 0.0 : (double)(<a class="code" href="timedata_8cpp.html#a09f81b9c7650f898cf3cf305b87547e6">GetAdjustedTime</a>() - addrConnect.<a class="code" href="classCAddress.html#ac1c44aac968b11f90ce529b133ae4e9b">nTime</a>)/3600.0);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="comment">// Connect</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="compat_8h.html#a26ef1173e2f2c0d3db27eca28397d723">SOCKET</a> hSocket;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordtype">bool</span> proxyConnectionFailed = <span class="keyword">false</span>;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">if</span> (pszDest ? <a class="code" href="netbase_8cpp.html#a5da7129cf2a5f0ea9e9020e38d2bddc8">ConnectSocketByName</a>(addrConnect, hSocket, pszDest, <a class="code" href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a>().GetDefaultPort(), <a class="code" href="netbase_8cpp.html#ac8115c6e2874217f2e487b5391cbe963">nConnectTimeout</a>, &amp;proxyConnectionFailed) :</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="netbase_8cpp.html#a0bbba84024b924fe188fbb49125191d5">ConnectSocket</a>(addrConnect, hSocket, <a class="code" href="netbase_8cpp.html#ac8115c6e2874217f2e487b5391cbe963">nConnectTimeout</a>, &amp;proxyConnectionFailed))</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="compat_8h.html#a6bc22ed56c6264c63610e14d03a73423">IsSelectableSocket</a>(hSocket)) {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;Cannot create connection: non-selectable socket created (fd &gt;= FD_SETSIZE ?)\n&quot;</span>);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(hSocket);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">if</span> (pszDest &amp;&amp; addrConnect.<a class="code" href="classCNetAddr.html#a6fe20b8da9701ca5dc2af078e2e8ac25">IsValid</a>()) {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">// It is possible that we already have a connection to the IP/port pszDest resolved to.</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// In that case, drop the connection that was just created, and return the existing CNode instead.</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">// Also store the name we used to connect in that CNode, so that future FindNode() calls to that</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// name catch this early.</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="classCNode.html">CNode</a>* pnode = <a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">FindNode</a>((<a class="code" href="classCService.html">CService</a>)addrConnect);</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">if</span> (pnode)</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="comment">// we have existing connection to this node but it was not a connection to masternode,</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// change flag and add reference so that we can correctly clear it later</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">if</span>(fConnectToMasternode &amp;&amp; !pnode-&gt;<a class="code" href="classCNode.html#a119824dcaebcd3c8e272a68f19a60c43">fMasternode</a>) {</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#afb65ed679f7bda59aab89e0f5afae292">AddRef</a>();</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a119824dcaebcd3c8e272a68f19a60c43">fMasternode</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a3155cd313d85ec3ff691f8259a5f5345">addrName</a>.empty()) {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a3155cd313d85ec3ff691f8259a5f5345">addrName</a> = std::string(pszDest);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(hSocket);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">return</span> pnode;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#afcddc2573121065177dc981cea710789">Attempt</a>(addrConnect);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// Add node</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <a class="code" href="classCNode.html">CNode</a>* pnode = <span class="keyword">new</span> <a class="code" href="classCNode.html">CNode</a>(<a class="code" href="classCConnman.html#a3de904541eed55727886098885fc5c3b">GetNewNodeId</a>(), <a class="code" href="classCConnman.html#a246c1e7e5f8bb3e148a03177fd410517">nLocalServices</a>, <a class="code" href="classCConnman.html#a0f7d06bcc905778cbfab8ac33d8efe85">GetBestHeight</a>(), hSocket, addrConnect, pszDest ? pszDest : <span class="stringliteral">&quot;&quot;</span>, <span class="keyword">false</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a395e2ead02225f29423e211aa2108272">nServicesExpected</a> = <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537">ServiceFlags</a>(addrConnect.<a class="code" href="classCAddress.html#a24e2309d92694a5a234751634bdf0458">nServices</a> &amp; <a class="code" href="classCConnman.html#a6305756f9622612ff70f3453a385535e">nRelevantServices</a>);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#abb39393ef08cb5668ded6cb14cdbc147">nTimeConnected</a> = <a class="code" href="utiltime_8cpp.html#a1c4021a78be4eeffa05732694ab4bab0">GetSystemTimeInSeconds</a>();</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span>(fConnectToMasternode) {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#afb65ed679f7bda59aab89e0f5afae292">AddRef</a>();</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a119824dcaebcd3c8e272a68f19a60c43">fMasternode</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <a class="code" href="net_8cpp.html#a475f2fc7d8f5cd7511db253cae8fe28a">GetNodeSignals</a>().<a class="code" href="structCNodeSignals.html#a1ce7c2d878dee3b81732b8ded51a7d6a">InitializeNode</a>(pnode, *<span class="keyword">this</span>);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.push_back(pnode);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> pnode;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!proxyConnectionFailed) {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="comment">// If connecting to the node failed, and failure is not caused by a problem connecting to</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// the proxy, mark this as an attempt.</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#afcddc2573121065177dc981cea710789">Attempt</a>(addrConnect);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;}</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classCConnman.html#a6e729a956380ac422ab78d842e158df1"> 442</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a6e729a956380ac422ab78d842e158df1">CConnman::DumpBanlist</a>()</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="classCConnman.html#a0695d37447e19cfde25be7e9b7f13f67">SweepBanned</a>(); <span class="comment">// clean unused entries (if bantime has expired)</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#ac5a5efb5d7a41f9a6f99c7328997f40d">BannedSetIsDirty</a>())</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; int64_t nStart = <a class="code" href="utiltime_8cpp.html#a139d0fe6387b9e230a9b8bb12d9b43b9">GetTimeMillis</a>();</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="classCBanDB.html">CBanDB</a> bandb;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <a class="code" href="addrdb_8h.html#af9675d81650e48d20ae495adf73da102">banmap_t</a> banmap;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <a class="code" href="classCConnman.html#a6006659dcdda45215102e5982d4879a1">SetBannedSetDirty</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="classCConnman.html#a72472ae8962210960eea780bf0e733f6">GetBanned</a>(banmap);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">if</span> (!bandb.<a class="code" href="classCBanDB.html#a0550a06c6b5987869f557467fe7f9896">Write</a>(banmap))</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <a class="code" href="classCConnman.html#a6006659dcdda45215102e5982d4879a1">SetBannedSetDirty</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;Flushed %d banned node ips/subnets to banlist.dat %dms\n&quot;</span>,</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; banmap.size(), <a class="code" href="utiltime_8cpp.html#a139d0fe6387b9e230a9b8bb12d9b43b9">GetTimeMillis</a>() - nStart);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;}</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;</div><div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classCNode.html#a63a6091a0b0fc0987d9436e1ec708423"> 462</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCNode.html#a63a6091a0b0fc0987d9436e1ec708423">CNode::CloseSocketDisconnect</a>()</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a> != <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>)</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;disconnecting peer=%d\n&quot;</span>, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;}</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno"><a class="line" href="classCConnman.html#a6ccf00706c65a961f8abf3d7019406f4"> 472</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a6ccf00706c65a961f8abf3d7019406f4">CConnman::ClearBanned</a>()</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;{</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">cs_setBanned</a>);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>.clear();</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="classCConnman.html#a1c714c44a6c870c08deddb267eaccba1">setBannedIsDirty</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <a class="code" href="classCConnman.html#a6e729a956380ac422ab78d842e158df1">DumpBanlist</a>(); <span class="comment">//store banlist to disk</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>)</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>-&gt;<a class="code" href="classCClientUIInterface.html#abd111d0c8de20c0d5554ce9d411adad1">BannedListChanged</a>();</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;}</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="classCConnman.html#aa014a4c7bbfc843aa4fff786a2aa8c96"> 484</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#aa014a4c7bbfc843aa4fff786a2aa8c96">CConnman::IsBanned</a>(<a class="code" href="classCNetAddr.html">CNetAddr</a> ip)</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;{</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordtype">bool</span> fResult = <span class="keyword">false</span>;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">cs_setBanned</a>);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">for</span> (banmap_t::iterator it = <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>.begin(); it != <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>.end(); it++)</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; {</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="classCSubNet.html">CSubNet</a> subNet = (*it).first;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="classCBanEntry.html">CBanEntry</a> banEntry = (*it).second;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span>(subNet.<a class="code" href="classCSubNet.html#af84fa02ebca222739c55e9d2cd7d38a3">Match</a>(ip) &amp;&amp; <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>() &lt; banEntry.<a class="code" href="classCBanEntry.html#ad055d0792f71b5da238c668ef0a27109">nBanUntil</a>)</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; fResult = <span class="keyword">true</span>;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">return</span> fResult;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;}</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="classCConnman.html#a40520ba6e2a4bcebf66dd605e530765a"> 501</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#aa014a4c7bbfc843aa4fff786a2aa8c96">CConnman::IsBanned</a>(<a class="code" href="classCSubNet.html">CSubNet</a> subnet)</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;{</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordtype">bool</span> fResult = <span class="keyword">false</span>;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">cs_setBanned</a>);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; banmap_t::iterator i = <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>.find(subnet);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">if</span> (i != <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>.end())</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="classCBanEntry.html">CBanEntry</a> banEntry = (*i).second;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>() &lt; banEntry.<a class="code" href="classCBanEntry.html#ad055d0792f71b5da238c668ef0a27109">nBanUntil</a>)</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; fResult = <span class="keyword">true</span>;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">return</span> fResult;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;}</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;</div><div class="line"><a name="l00517"></a><span class="lineno"><a class="line" href="classCConnman.html#ac57208a8ea613f814aaf1c5c5e5394a4"> 517</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#ac57208a8ea613f814aaf1c5c5e5394a4">CConnman::Ban</a>(<span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a>&amp; addr, <span class="keyword">const</span> <a class="code" href="addrdb_8h.html#ae79eefa5f9d20b9761dfc7a41123e668">BanReason</a> &amp;banReason, int64_t bantimeoffset, <span class="keywordtype">bool</span> sinceUnixEpoch) {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <a class="code" href="classCSubNet.html">CSubNet</a> subNet(addr);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <a class="code" href="classCConnman.html#ac57208a8ea613f814aaf1c5c5e5394a4">Ban</a>(subNet, banReason, bantimeoffset, sinceUnixEpoch);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;}</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;</div><div class="line"><a name="l00522"></a><span class="lineno"><a class="line" href="classCConnman.html#ace6d92a39c2ba3062e52b16735c65df7"> 522</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#ac57208a8ea613f814aaf1c5c5e5394a4">CConnman::Ban</a>(<span class="keyword">const</span> <a class="code" href="classCSubNet.html">CSubNet</a>&amp; subNet, <span class="keyword">const</span> <a class="code" href="addrdb_8h.html#ae79eefa5f9d20b9761dfc7a41123e668">BanReason</a> &amp;banReason, int64_t bantimeoffset, <span class="keywordtype">bool</span> sinceUnixEpoch) {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <a class="code" href="classCBanEntry.html">CBanEntry</a> banEntry(<a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>());</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; banEntry.<a class="code" href="classCBanEntry.html#a70899703ea4dcfe6056f4db8b7f77126">banReason</a> = banReason;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">if</span> (bantimeoffset &lt;= 0)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; bantimeoffset = <a class="code" href="util_8cpp.html#a24f685720bf40370e5bd2a192ad50cd8">GetArg</a>(<span class="stringliteral">&quot;-bantime&quot;</span>, <a class="code" href="net_8h.html#abb358e6d9aa1383e5196cb61f9357265">DEFAULT_MISBEHAVING_BANTIME</a>);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; sinceUnixEpoch = <span class="keyword">false</span>;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; banEntry.<a class="code" href="classCBanEntry.html#ad055d0792f71b5da238c668ef0a27109">nBanUntil</a> = (sinceUnixEpoch ? 0 : <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>() )+bantimeoffset;</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">cs_setBanned</a>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>[subNet].nBanUntil &lt; banEntry.<a class="code" href="classCBanEntry.html#ad055d0792f71b5da238c668ef0a27109">nBanUntil</a>) {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>[subNet] = banEntry;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="classCConnman.html#a1c714c44a6c870c08deddb267eaccba1">setBannedIsDirty</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; }</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>)</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>-&gt;<a class="code" href="classCClientUIInterface.html#abd111d0c8de20c0d5554ce9d411adad1">BannedListChanged</a>();</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>) {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">if</span> (subNet.<a class="code" href="classCSubNet.html#af84fa02ebca222739c55e9d2cd7d38a3">Match</a>((<a class="code" href="classCNetAddr.html">CNetAddr</a>)pnode-&gt;<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a>))</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">if</span>(banReason == <a class="code" href="addrdb_8h.html#ae79eefa5f9d20b9761dfc7a41123e668a2c0ec70be7f8b39b69fbe4fbffe82c43">BanReasonManuallyAdded</a>)</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="classCConnman.html#a6e729a956380ac422ab78d842e158df1">DumpBanlist</a>(); <span class="comment">//store banlist to disk immediately if user requested ban</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;}</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;</div><div class="line"><a name="l00554"></a><span class="lineno"><a class="line" href="classCConnman.html#a4f931ae01a4c822a307620f4816cdee5"> 554</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#a4f931ae01a4c822a307620f4816cdee5">CConnman::Unban</a>(<span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a> &amp;addr) {</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <a class="code" href="classCSubNet.html">CSubNet</a> subNet(addr);</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a4f931ae01a4c822a307620f4816cdee5">Unban</a>(subNet);</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;}</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno"><a class="line" href="classCConnman.html#aec22c52d83be0b6cccb723af3a28b366"> 559</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#a4f931ae01a4c822a307620f4816cdee5">CConnman::Unban</a>(<span class="keyword">const</span> <a class="code" href="classCSubNet.html">CSubNet</a> &amp;subNet) {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">cs_setBanned</a>);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>.erase(subNet))</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <a class="code" href="classCConnman.html#a1c714c44a6c870c08deddb267eaccba1">setBannedIsDirty</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>-&gt;<a class="code" href="classCClientUIInterface.html#abd111d0c8de20c0d5554ce9d411adad1">BannedListChanged</a>();</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <a class="code" href="classCConnman.html#a6e729a956380ac422ab78d842e158df1">DumpBanlist</a>(); <span class="comment">//store banlist to disk immediately</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;}</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;</div><div class="line"><a name="l00572"></a><span class="lineno"><a class="line" href="classCConnman.html#a72472ae8962210960eea780bf0e733f6"> 572</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a72472ae8962210960eea780bf0e733f6">CConnman::GetBanned</a>(<a class="code" href="addrdb_8h.html#af9675d81650e48d20ae495adf73da102">banmap_t</a> &amp;banMap)</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;{</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">cs_setBanned</a>);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; banMap = <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>; <span class="comment">//create a thread safe copy</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;}</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;</div><div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="classCConnman.html#ae6697e1fd73e7d7cff3a699fe2034345"> 578</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#ae6697e1fd73e7d7cff3a699fe2034345">CConnman::SetBanned</a>(<span class="keyword">const</span> <a class="code" href="addrdb_8h.html#af9675d81650e48d20ae495adf73da102">banmap_t</a> &amp;banMap)</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;{</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">cs_setBanned</a>);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a> = banMap;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <a class="code" href="classCConnman.html#a1c714c44a6c870c08deddb267eaccba1">setBannedIsDirty</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;}</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;</div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classCConnman.html#a0695d37447e19cfde25be7e9b7f13f67"> 585</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a0695d37447e19cfde25be7e9b7f13f67">CConnman::SweepBanned</a>()</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;{</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; int64_t now = <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>();</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">cs_setBanned</a>);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; banmap_t::iterator it = <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>.begin();</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">while</span>(it != <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>.end())</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; {</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <a class="code" href="classCSubNet.html">CSubNet</a> subNet = (*it).first;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <a class="code" href="classCBanEntry.html">CBanEntry</a> banEntry = (*it).second;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">if</span>(now &gt; banEntry.<a class="code" href="classCBanEntry.html#ad055d0792f71b5da238c668ef0a27109">nBanUntil</a>)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">setBanned</a>.erase(it++);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <a class="code" href="classCConnman.html#a1c714c44a6c870c08deddb267eaccba1">setBannedIsDirty</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;%s: Removed banned node ip/subnet from banlist.dat: %s\n&quot;</span>, __func__, subNet.<a class="code" href="classCSubNet.html#a91cabfec6c5056fe8f8b477334563880">ToString</a>());</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; ++it;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;}</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno"><a class="line" href="classCConnman.html#ac5a5efb5d7a41f9a6f99c7328997f40d"> 606</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#ac5a5efb5d7a41f9a6f99c7328997f40d">CConnman::BannedSetIsDirty</a>()</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;{</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">cs_setBanned</a>);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a1c714c44a6c870c08deddb267eaccba1">setBannedIsDirty</a>;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;}</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="classCConnman.html#a6006659dcdda45215102e5982d4879a1"> 612</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a6006659dcdda45215102e5982d4879a1">CConnman::SetBannedSetDirty</a>(<span class="keywordtype">bool</span> dirty)</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;{</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">cs_setBanned</a>); <span class="comment">//reuse setBanned lock for the isDirty flag</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <a class="code" href="classCConnman.html#a1c714c44a6c870c08deddb267eaccba1">setBannedIsDirty</a> = dirty;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;}</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="classCConnman.html#afe4088d5d272b05197b0c2cfeb9bc50b"> 619</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#afe4088d5d272b05197b0c2cfeb9bc50b">CConnman::IsWhitelistedRange</a>(<span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a> &amp;addr) {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#add237cb3a836a845b0a4d7c093ef10f4">cs_vWhitelistedRange</a>);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> <a class="code" href="classCSubNet.html">CSubNet</a>&amp; subnet, <a class="code" href="classCConnman.html#aab00be311fc6aea398d4caf2f9b9e770">vWhitelistedRange</a>) {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">if</span> (subnet.<a class="code" href="classCSubNet.html#af84fa02ebca222739c55e9d2cd7d38a3">Match</a>(addr))</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;}</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;</div><div class="line"><a name="l00628"></a><span class="lineno"><a class="line" href="classCConnman.html#a058d19652e32dbc88f548e8654d675af"> 628</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a058d19652e32dbc88f548e8654d675af">CConnman::AddWhitelistedRange</a>(<span class="keyword">const</span> <a class="code" href="classCSubNet.html">CSubNet</a> &amp;subnet) {</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#add237cb3a836a845b0a4d7c093ef10f4">cs_vWhitelistedRange</a>);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <a class="code" href="classCConnman.html#aab00be311fc6aea398d4caf2f9b9e770">vWhitelistedRange</a>.push_back(subnet);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;}</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;<span class="preprocessor">#undef X</span></div><div class="line"><a name="l00634"></a><span class="lineno"><a class="line" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3"> 634</a></span>&#160;<span class="preprocessor">#define X(name) stats.name = name</span></div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="classCNode.html#aaa77188d9df85b80e3f8a30292acf6a9"> 635</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCNode.html#aaa77188d9df85b80e3f8a30292acf6a9">CNode::copyStats</a>(<a class="code" href="classCNodeStats.html">CNodeStats</a> &amp;stats)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;{</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; stats.<a class="code" href="classCNodeStats.html#ad2bceab1a335d59f42af37178b72fee7">nodeid</a> = this-&gt;<a class="code" href="classCNode.html#a157903f7830c0dfbf6a93852066f0b8f">GetId</a>();</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a1a2342bb4914d738c14c04affbcdac27">nServices</a>);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a>);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#ab387bb0c4ffd42e3f0aea233dca0e301">fRelayTxes</a>);</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#af39253ad525733ca64ab3fc785dfc4eb">nLastSend</a>);</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#afb40f43a51ba686de93256727351af07">nLastRecv</a>);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#abb39393ef08cb5668ded6cb14cdbc147">nTimeConnected</a>);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a3079fadef397abbf7e8d444f4426ebe7">nTimeOffset</a>);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a3155cd313d85ec3ff691f8259a5f5345">addrName</a>);</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a0a2cdd01cb730536adf1780c3df66430">nVersion</a>);</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a05f0401427c5ffebd1ca404848e83ff7">cleanSubVer</a>);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a64b2550ec558b6106ebc122d450ad35b">fInbound</a>);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a597b41bd64e2ac9391b7211e65aeb52a">nStartingHeight</a>);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a33e24a9544df3c60f9e1ec05b5e91051">nSendBytes</a>);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a51e1156224dc77de9c0812f599f1bff4">mapSendBytesPerMsgCmd</a>);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a8bbe2a7052476d62acf7f0a5a9c5981b">nRecvBytes</a>);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#a2fb06d8be1f078b8796dc5098f114d38">mapRecvBytesPerMsgCmd</a>);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <a class="code" href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a>(<a class="code" href="classCNode.html#ad3096c14b54aa39a02edb63a4a734c3e">fWhitelisted</a>);</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="comment">// It is common for nodes with good ping times to suddenly become lagged,</span></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="comment">// due to a new block arriving or other large transfer.</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="comment">// Merely reporting pingtime might fool the caller into thinking the node was still responsive,</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="comment">// since pingtime does not update until the ping is complete, which might take a while.</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="comment">// So, if a ping is taking an unusually long time in flight,</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="comment">// the caller can immediately detect that this is happening.</span></div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; int64_t nPingUsecWait = 0;</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">if</span> ((0 != <a class="code" href="classCNode.html#a9a077fbd09ddee1d81f027bc01a4ec68">nPingNonceSent</a>) &amp;&amp; (0 != <a class="code" href="classCNode.html#a8352aa332af726ff117fb890c4dd3869">nPingUsecStart</a>)) {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; nPingUsecWait = <a class="code" href="utiltime_8cpp.html#a0c5a06b50cd805b1923552114494c029">GetTimeMicros</a>() - <a class="code" href="classCNode.html#a8352aa332af726ff117fb890c4dd3869">nPingUsecStart</a>;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; }</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="comment">// Raw ping time is in microseconds, but show it to user as whole seconds (Dash users should be well used to small numbers with many decimal places by now :)</span></div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; stats.<a class="code" href="classCNodeStats.html#a535c198cbe3af112d4538f535e6618cd">dPingTime</a> = (((double)<a class="code" href="classCNode.html#ada34ffe1700a5dafb57de7c4d2491844">nPingUsecTime</a>) / 1e6);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; stats.<a class="code" href="classCNodeStats.html#a6bfc3caa74e3e8621808969b178e9864">dMinPing</a> = (((double)<a class="code" href="classCNode.html#a4d077afd5c600b9e3241abce4df60722">nMinPingUsecTime</a>) / 1e6);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; stats.<a class="code" href="classCNodeStats.html#a03a38f87940d04b321b9fb3102d0368d">dPingWait</a> = (((double)nPingUsecWait) / 1e6);</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="comment">// Leave string empty if addrLocal invalid (not filled in yet)</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; stats.<a class="code" href="classCNodeStats.html#a027a5445a0c40e6489875e653be9c758">addrLocal</a> = <a class="code" href="classCNode.html#a1b6517682efa0709f44780a95384c4ec">addrLocal</a>.<a class="code" href="classCNetAddr.html#a6fe20b8da9701ca5dc2af078e2e8ac25">IsValid</a>() ? <a class="code" href="classCNode.html#a1b6517682efa0709f44780a95384c4ec">addrLocal</a>.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>() : <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;}</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;<span class="preprocessor">#undef X</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;</div><div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="classCNode.html#a7f39c9fe6b7975531cb9963846aed3e7"> 677</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCNode.html#a7f39c9fe6b7975531cb9963846aed3e7">CNode::ReceiveMsgBytes</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pch, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBytes, <span class="keywordtype">bool</span>&amp; complete)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;{</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; complete = <span class="keyword">false</span>;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; int64_t nTimeMicros = <a class="code" href="utiltime_8cpp.html#a0c5a06b50cd805b1923552114494c029">GetTimeMicros</a>();</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <a class="code" href="classCNode.html#afb40f43a51ba686de93256727351af07">nLastRecv</a> = nTimeMicros / 1000000;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <a class="code" href="classCNode.html#a8bbe2a7052476d62acf7f0a5a9c5981b">nRecvBytes</a> += nBytes;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">while</span> (nBytes &gt; 0) {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="comment">// get current incomplete message, or create a new one</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCNode.html#a2f7a99d038591b007d709a17cbdae3dd">vRecvMsg</a>.empty() ||</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <a class="code" href="classCNode.html#a2f7a99d038591b007d709a17cbdae3dd">vRecvMsg</a>.back().complete())</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <a class="code" href="classCNode.html#a2f7a99d038591b007d709a17cbdae3dd">vRecvMsg</a>.push_back(<a class="code" href="classCNetMessage.html">CNetMessage</a>(<a class="code" href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a>().MessageStart(), <a class="code" href="serialize_8h.html#ae4d5251432e1a9e6803c0240cc492e18a652754eeaf79fba4fcf4c18597a6961c">SER_NETWORK</a>, <a class="code" href="version_8h.html#a2c4c900f5bd0c956cc1a64cd0cc1c318">INIT_PROTO_VERSION</a>));</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="classCNetMessage.html">CNetMessage</a>&amp; <a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a> = <a class="code" href="classCNode.html#a2f7a99d038591b007d709a17cbdae3dd">vRecvMsg</a>.back();</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="comment">// absorb network data</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordtype">int</span> handled;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>.in_data)</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; handled = <a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>.readHeader(pch, nBytes);</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; handled = <a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>.readData(pch, nBytes);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">if</span> (handled &lt; 0)</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>.in_data &amp;&amp; <a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>.hdr.nMessageSize &gt; <a class="code" href="net_8h.html#a4dd59589d5788e2d620556c43a3381d9">MAX_PROTOCOL_MESSAGE_LENGTH</a>) {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;Oversized message from peer=%i, disconnecting\n&quot;</span>, <a class="code" href="classCNode.html#a157903f7830c0dfbf6a93852066f0b8f">GetId</a>());</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; }</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; pch += handled;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; nBytes -= handled;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>.complete()) {</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="comment">//store received bytes per message command</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="comment">//to prevent a memory DOS, only allow valid commands</span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; mapMsgCmdSize::iterator i = <a class="code" href="classCNode.html#a2fb06d8be1f078b8796dc5098f114d38">mapRecvBytesPerMsgCmd</a>.find(<a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>.hdr.pchCommand);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">if</span> (i == <a class="code" href="classCNode.html#a2fb06d8be1f078b8796dc5098f114d38">mapRecvBytesPerMsgCmd</a>.end())</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; i = <a class="code" href="classCNode.html#a2fb06d8be1f078b8796dc5098f114d38">mapRecvBytesPerMsgCmd</a>.find(<a class="code" href="net_8cpp.html#a6dfc4be12d34c83608661113ac3693fc">NET_MESSAGE_COMMAND_OTHER</a>);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; assert(i != <a class="code" href="classCNode.html#a2fb06d8be1f078b8796dc5098f114d38">mapRecvBytesPerMsgCmd</a>.end());</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; i-&gt;second += <a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>.hdr.nMessageSize + <a class="code" href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aadd8582d526addef583c978e5261dfec1">CMessageHeader::HEADER_SIZE</a>;</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>.nTime = nTimeMicros;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; complete = <span class="keyword">true</span>;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; }</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;}</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno"><a class="line" href="classCNode.html#a0a55cea2748b1837610b2caed8069a90"> 728</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCNode.html#a0a55cea2748b1837610b2caed8069a90">CNode::SetSendVersion</a>(<span class="keywordtype">int</span> nVersionIn)</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;{</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="comment">// Send version may only be changed in the version message, and</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="comment">// only one version message is allowed per session. We can therefore</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="comment">// treat this value as const and even atomic as long as it&#39;s only used</span></div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="comment">// once a version message has been successfully processed. Any attempt to</span></div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="comment">// set this twice is an error.</span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCNode.html#ac0e40c335b80782bb5258dc4ffa94e34">nSendVersion</a> != 0) {</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <a class="code" href="util_8h.html#af8985880cf4ef26df0a5aa2ffcb76662">error</a>(<span class="stringliteral">&quot;Send version already set for node: %i. Refusing to change from %i to %i&quot;</span>, <span class="keywordtype">id</span>, <a class="code" href="classCNode.html#ac0e40c335b80782bb5258dc4ffa94e34">nSendVersion</a>, nVersionIn);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <a class="code" href="classCNode.html#ac0e40c335b80782bb5258dc4ffa94e34">nSendVersion</a> = nVersionIn;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; }</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;}</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;</div><div class="line"><a name="l00742"></a><span class="lineno"><a class="line" href="classCNode.html#a253ceac237f69cc1155bfb71acd0c48f"> 742</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classCNode.html#a253ceac237f69cc1155bfb71acd0c48f">CNode::GetSendVersion</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="comment">// The send version should always be explicitly set to</span></div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="comment">// INIT_PROTO_VERSION rather than using this value until SetSendVersion</span></div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="comment">// has been called.</span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCNode.html#ac0e40c335b80782bb5258dc4ffa94e34">nSendVersion</a> == 0) {</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <a class="code" href="util_8h.html#af8985880cf4ef26df0a5aa2ffcb76662">error</a>(<span class="stringliteral">&quot;Requesting unset send version for node: %i. Using %i&quot;</span>, <span class="keywordtype">id</span>, <a class="code" href="version_8h.html#a2c4c900f5bd0c956cc1a64cd0cc1c318">INIT_PROTO_VERSION</a>);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keywordflow">return</span> <a class="code" href="version_8h.html#a2c4c900f5bd0c956cc1a64cd0cc1c318">INIT_PROTO_VERSION</a>;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; }</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCNode.html#ac0e40c335b80782bb5258dc4ffa94e34">nSendVersion</a>;</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;}</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;</div><div class="line"><a name="l00755"></a><span class="lineno"><a class="line" href="classCNetMessage.html#a3e58f5f29b23d1377f8fd15fc75c78ac"> 755</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classCNetMessage.html#a3e58f5f29b23d1377f8fd15fc75c78ac">CNetMessage::readHeader</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pch, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBytes)</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;{</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="comment">// copy data to temporary parsing buffer</span></div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nRemaining = 24 - <a class="code" href="classCNetMessage.html#a1a500121037490eec4b238906f3a23ad">nHdrPos</a>;</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nCopy = std::min(nRemaining, nBytes);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="glibc__compat_8cpp.html#a0f46826ab0466591e136db24394923cf">memcpy</a>(&amp;<a class="code" href="classCNetMessage.html#a80a6f95f0c187aa97788118248cbf452">hdrbuf</a>[<a class="code" href="classCNetMessage.html#a1a500121037490eec4b238906f3a23ad">nHdrPos</a>], pch, nCopy);</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <a class="code" href="classCNetMessage.html#a1a500121037490eec4b238906f3a23ad">nHdrPos</a> += nCopy;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="comment">// if header incomplete, exit</span></div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCNetMessage.html#a1a500121037490eec4b238906f3a23ad">nHdrPos</a> &lt; 24)</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">return</span> nCopy;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="comment">// deserialize to CMessageHeader</span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keywordflow">try</span> {</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <a class="code" href="classCNetMessage.html#a80a6f95f0c187aa97788118248cbf452">hdrbuf</a> &gt;&gt; <a class="code" href="classCNetMessage.html#ae7215dca62862a3688f7eeb94646c377">hdr</a>;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; }</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp;) {</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="comment">// reject messages larger than MAX_SIZE</span></div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCNetMessage.html#ae7215dca62862a3688f7eeb94646c377">hdr</a>.<a class="code" href="classCMessageHeader.html#aebbc26feb23d551467ebd58b509204d0">nMessageSize</a> &gt; <a class="code" href="serialize_8h.html#a849636cca14fcbcfdd38f70254c0da58">MAX_SIZE</a>)</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="comment">// switch state to reading message data</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="classCNetMessage.html#a8f399ad7225f980bdab3ede17b1b23af">in_data</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">return</span> nCopy;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;}</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;</div><div class="line"><a name="l00786"></a><span class="lineno"><a class="line" href="classCNetMessage.html#adbc1669a56462daea5f37e5e99117f8c"> 786</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classCNetMessage.html#adbc1669a56462daea5f37e5e99117f8c">CNetMessage::readData</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pch, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBytes)</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;{</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nRemaining = <a class="code" href="classCNetMessage.html#ae7215dca62862a3688f7eeb94646c377">hdr</a>.<a class="code" href="classCMessageHeader.html#aebbc26feb23d551467ebd58b509204d0">nMessageSize</a> - <a class="code" href="classCNetMessage.html#a418f59287d1805dda6959f27a170c855">nDataPos</a>;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nCopy = std::min(nRemaining, nBytes);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCNetMessage.html#a1a25c16099d01362e1663390a2e06d1a">vRecv</a>.<a class="code" href="classCDataStream.html#add30f866dd928fc28c47fe79a0a6723a">size</a>() &lt; <a class="code" href="classCNetMessage.html#a418f59287d1805dda6959f27a170c855">nDataPos</a> + nCopy) {</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="comment">// Allocate up to 256 KiB ahead, but never more than the total message size.</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <a class="code" href="classCNetMessage.html#a1a25c16099d01362e1663390a2e06d1a">vRecv</a>.<a class="code" href="classCDataStream.html#aa91abddde56127bd3d6ac2a0fb005874">resize</a>(std::min(<a class="code" href="classCNetMessage.html#ae7215dca62862a3688f7eeb94646c377">hdr</a>.<a class="code" href="classCMessageHeader.html#aebbc26feb23d551467ebd58b509204d0">nMessageSize</a>, <a class="code" href="classCNetMessage.html#a418f59287d1805dda6959f27a170c855">nDataPos</a> + nCopy + 256 * 1024));</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; }</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <a class="code" href="glibc__compat_8cpp.html#a0f46826ab0466591e136db24394923cf">memcpy</a>(&amp;<a class="code" href="classCNetMessage.html#a1a25c16099d01362e1663390a2e06d1a">vRecv</a>[<a class="code" href="classCNetMessage.html#a418f59287d1805dda6959f27a170c855">nDataPos</a>], pch, nCopy);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <a class="code" href="classCNetMessage.html#a418f59287d1805dda6959f27a170c855">nDataPos</a> += nCopy;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">return</span> nCopy;</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;}</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;<span class="comment">// requires LOCK(cs_vSend)</span></div><div class="line"><a name="l00811"></a><span class="lineno"><a class="line" href="classCConnman.html#a62a79bcc191112ab8ea87e860a16d2a2"> 811</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classCConnman.html#a62a79bcc191112ab8ea87e860a16d2a2">CConnman::SocketSendData</a>(<a class="code" href="classCNode.html">CNode</a> *pnode)</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;{</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; std::deque&lt;CSerializeData&gt;::iterator it = pnode-&gt;<a class="code" href="classCNode.html#a68e5fb1a80fe4247aa577a3c9a74b399">vSendMsg</a>.begin();</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordtype">size_t</span> nSentSize = 0;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">while</span> (it != pnode-&gt;<a class="code" href="classCNode.html#a68e5fb1a80fe4247aa577a3c9a74b399">vSendMsg</a>.end()) {</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keyword">const</span> <a class="code" href="zeroafterfree_8h.html#a77935f92ff5ba1d71d692166f6ce0c1b">CSerializeData</a> &amp;<a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a> = *it;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; assert(<a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>.size() &gt; pnode-&gt;<a class="code" href="classCNode.html#a090bda86de6b84c3db83e1f029d4f453">nSendOffset</a>);</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordtype">int</span> nBytes = send(pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>, &amp;<a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>[pnode-&gt;<a class="code" href="classCNode.html#a090bda86de6b84c3db83e1f029d4f453">nSendOffset</a>], <a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>.size() - pnode-&gt;<a class="code" href="classCNode.html#a090bda86de6b84c3db83e1f029d4f453">nSendOffset</a>, <a class="code" href="compat_8h.html#a9f55d0e90dc8cc6b2287312435cdde48">MSG_NOSIGNAL</a> | MSG_DONTWAIT);</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">if</span> (nBytes &gt; 0) {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af39253ad525733ca64ab3fc785dfc4eb">nLastSend</a> = <a class="code" href="utiltime_8cpp.html#a1c4021a78be4eeffa05732694ab4bab0">GetSystemTimeInSeconds</a>();</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a33e24a9544df3c60f9e1ec05b5e91051">nSendBytes</a> += nBytes;</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a090bda86de6b84c3db83e1f029d4f453">nSendOffset</a> += nBytes;</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; nSentSize += nBytes;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a090bda86de6b84c3db83e1f029d4f453">nSendOffset</a> == <a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>.size()) {</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a090bda86de6b84c3db83e1f029d4f453">nSendOffset</a> = 0;</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a3c99b7e2b0e53feb58f6859453456f74">nSendSize</a> -= <a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>.size();</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a73b323f9e310e3054d909934b37ae671">fPauseSend</a> = pnode-&gt;<a class="code" href="classCNode.html#a3c99b7e2b0e53feb58f6859453456f74">nSendSize</a> &gt; <a class="code" href="classCConnman.html#ade433492622155412824555e850e3ed9">nSendBufferMaxSize</a>;</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; it++;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="comment">// could not send full message; stop sending more</span></div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">if</span> (nBytes &lt; 0) {</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="comment">// error</span></div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordtype">int</span> nErr = <a class="code" href="compat_8h.html#a6d24fe3ab2906c21c373505ca244f90b">WSAGetLastError</a>();</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">if</span> (nErr != <a class="code" href="compat_8h.html#a4ba23242bee4784b72a0a170e2f975a0">WSAEWOULDBLOCK</a> &amp;&amp; nErr != <a class="code" href="compat_8h.html#a7ce1c171e08d68442124bf6189f8aec5">WSAEMSGSIZE</a> &amp;&amp; nErr != <a class="code" href="compat_8h.html#aef81890a7d46cb9dda85df9b96cba6b1">WSAEINTR</a> &amp;&amp; nErr != <a class="code" href="compat_8h.html#ada8711ffab59910a2732cfa4b7c24e29">WSAEINPROGRESS</a>)</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;socket send error %s\n&quot;</span>, <a class="code" href="netbase_8cpp.html#a8ddb7d8d6e5b5cfabfdeea132f556977">NetworkErrorString</a>(nErr));</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; }</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; }</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="comment">// couldn&#39;t send anything at all</span></div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; }</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; }</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordflow">if</span> (it == pnode-&gt;<a class="code" href="classCNode.html#a68e5fb1a80fe4247aa577a3c9a74b399">vSendMsg</a>.end()) {</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; assert(pnode-&gt;<a class="code" href="classCNode.html#a090bda86de6b84c3db83e1f029d4f453">nSendOffset</a> == 0);</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; assert(pnode-&gt;<a class="code" href="classCNode.html#a3c99b7e2b0e53feb58f6859453456f74">nSendSize</a> == 0);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; }</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a68e5fb1a80fe4247aa577a3c9a74b399">vSendMsg</a>.erase(pnode-&gt;<a class="code" href="classCNode.html#a68e5fb1a80fe4247aa577a3c9a74b399">vSendMsg</a>.begin(), it);</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordflow">return</span> nSentSize;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160;}</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;</div><div class="line"><a name="l00857"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html"> 857</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;{</div><div class="line"><a name="l00859"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#a36be97837672cce502d2009f51857359"> 859</a></span>&#160; <a class="code" href="structNodeEvictionCandidate.html#a36be97837672cce502d2009f51857359">NodeEvictionCandidate</a>(<a class="code" href="classCNode.html">CNode</a>* pnode)</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; : <a class="code" href="structNodeEvictionCandidate.html#a81cf839352327b7cf93c0cc995e87eb0">id</a>(pnode-&gt;<a class="code" href="structNodeEvictionCandidate.html#a81cf839352327b7cf93c0cc995e87eb0">id</a>),</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <a class="code" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">nTimeConnected</a>(pnode-&gt;<a class="code" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">nTimeConnected</a>),</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <a class="code" href="structNodeEvictionCandidate.html#ada08284fcc0356af24a7721734b7fa85">nMinPingUsecTime</a>(pnode-&gt;<a class="code" href="structNodeEvictionCandidate.html#ada08284fcc0356af24a7721734b7fa85">nMinPingUsecTime</a>),</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <a class="code" href="structNodeEvictionCandidate.html#a13e9f6fa3d68cf3c428c18452302a3c6">nLastBlockTime</a>(pnode-&gt;<a class="code" href="structNodeEvictionCandidate.html#a13e9f6fa3d68cf3c428c18452302a3c6">nLastBlockTime</a>),</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <a class="code" href="structNodeEvictionCandidate.html#ad86deabc890ea505a140613dd3b4d080">nLastTXTime</a>(pnode-&gt;<a class="code" href="structNodeEvictionCandidate.html#ad86deabc890ea505a140613dd3b4d080">nLastTXTime</a>),</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <a class="code" href="structNodeEvictionCandidate.html#ac42a938f54389f748e532e4e09e190a5">fNetworkNode</a>(pnode-&gt;<a class="code" href="structNodeEvictionCandidate.html#ac42a938f54389f748e532e4e09e190a5">fNetworkNode</a>),</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <a class="code" href="structNodeEvictionCandidate.html#ae731ffd18e237d5d4055a52fbbd231ac">fRelayTxes</a>(pnode-&gt;<a class="code" href="structNodeEvictionCandidate.html#ae731ffd18e237d5d4055a52fbbd231ac">fRelayTxes</a>),</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <a class="code" href="structNodeEvictionCandidate.html#ae1d8441405e2878dfdd79e8f9c179b0a">fBloomFilter</a>(pnode-&gt;pfilter != NULL),</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <a class="code" href="structNodeEvictionCandidate.html#a14bbf6be8778f2998fbad7883ffa0942">vchNetGroup</a>(pnode-&gt;addr.GetGroup()),</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <a class="code" href="structNodeEvictionCandidate.html#a04bdf2cf918f5125cd0b9cce4a447374">vchKeyedNetGroup</a>(pnode-&gt;<a class="code" href="structNodeEvictionCandidate.html#a04bdf2cf918f5125cd0b9cce4a447374">vchKeyedNetGroup</a>)</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; {}</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160;</div><div class="line"><a name="l00872"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#a81cf839352327b7cf93c0cc995e87eb0"> 872</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structNodeEvictionCandidate.html#a81cf839352327b7cf93c0cc995e87eb0">id</a>;</div><div class="line"><a name="l00873"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43"> 873</a></span>&#160; int64_t <a class="code" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">nTimeConnected</a>;</div><div class="line"><a name="l00874"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#ada08284fcc0356af24a7721734b7fa85"> 874</a></span>&#160; int64_t <a class="code" href="structNodeEvictionCandidate.html#ada08284fcc0356af24a7721734b7fa85">nMinPingUsecTime</a>;</div><div class="line"><a name="l00875"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#a13e9f6fa3d68cf3c428c18452302a3c6"> 875</a></span>&#160; int64_t <a class="code" href="structNodeEvictionCandidate.html#a13e9f6fa3d68cf3c428c18452302a3c6">nLastBlockTime</a>;</div><div class="line"><a name="l00876"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#ad86deabc890ea505a140613dd3b4d080"> 876</a></span>&#160; int64_t <a class="code" href="structNodeEvictionCandidate.html#ad86deabc890ea505a140613dd3b4d080">nLastTXTime</a>;</div><div class="line"><a name="l00877"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#ac42a938f54389f748e532e4e09e190a5"> 877</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structNodeEvictionCandidate.html#ac42a938f54389f748e532e4e09e190a5">fNetworkNode</a>;</div><div class="line"><a name="l00878"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#ae731ffd18e237d5d4055a52fbbd231ac"> 878</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structNodeEvictionCandidate.html#ae731ffd18e237d5d4055a52fbbd231ac">fRelayTxes</a>;</div><div class="line"><a name="l00879"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#ae1d8441405e2878dfdd79e8f9c179b0a"> 879</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structNodeEvictionCandidate.html#ae1d8441405e2878dfdd79e8f9c179b0a">fBloomFilter</a>;</div><div class="line"><a name="l00880"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#a14bbf6be8778f2998fbad7883ffa0942"> 880</a></span>&#160; std::vector&lt;unsigned char&gt; <a class="code" href="structNodeEvictionCandidate.html#a14bbf6be8778f2998fbad7883ffa0942">vchNetGroup</a>;</div><div class="line"><a name="l00881"></a><span class="lineno"><a class="line" href="structNodeEvictionCandidate.html#a04bdf2cf918f5125cd0b9cce4a447374"> 881</a></span>&#160; std::vector&lt;unsigned char&gt; <a class="code" href="structNodeEvictionCandidate.html#a04bdf2cf918f5125cd0b9cce4a447374">vchKeyedNetGroup</a>;</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;};</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;</div><div class="line"><a name="l00884"></a><span class="lineno"><a class="line" href="net_8cpp.html#ae96c8b921771b8ffe774146180dcdfd0"> 884</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#ae96c8b921771b8ffe774146180dcdfd0">ReverseCompareNodeMinPingTime</a>(<span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a>&amp; a, <span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a>&amp; b)</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;{</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">return</span> a.<a class="code" href="structNodeEvictionCandidate.html#ada08284fcc0356af24a7721734b7fa85">nMinPingUsecTime</a> &gt; b.<a class="code" href="structNodeEvictionCandidate.html#ada08284fcc0356af24a7721734b7fa85">nMinPingUsecTime</a>;</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160;}</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;</div><div class="line"><a name="l00889"></a><span class="lineno"><a class="line" href="net_8cpp.html#a56c574c7d0575da90992b4d9459130d5"> 889</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a56c574c7d0575da90992b4d9459130d5">ReverseCompareNodeTimeConnected</a>(<span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a>&amp; a, <span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a>&amp; b)</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;{</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="keywordflow">return</span> a.<a class="code" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">nTimeConnected</a> &gt; b.<a class="code" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">nTimeConnected</a>;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;}</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno"><a class="line" href="net_8cpp.html#a296b4df8547a28aa11492eee4d0b300f"> 894</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a296b4df8547a28aa11492eee4d0b300f">CompareKeyedNetGroup</a>(<span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a>&amp; a, <span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a>&amp; b)</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;{</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">return</span> a.<a class="code" href="structNodeEvictionCandidate.html#a04bdf2cf918f5125cd0b9cce4a447374">vchKeyedNetGroup</a> &lt; b.<a class="code" href="structNodeEvictionCandidate.html#a04bdf2cf918f5125cd0b9cce4a447374">vchKeyedNetGroup</a>;</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;}</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160;</div><div class="line"><a name="l00899"></a><span class="lineno"><a class="line" href="net_8cpp.html#a041f7af36ac1a8be9d6b01e1441c6144"> 899</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a041f7af36ac1a8be9d6b01e1441c6144">CompareNodeBlockTime</a>(<span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a> &amp;a, <span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a> &amp;b)</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160;{</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="comment">// There is a fall-through here because it is common for a node to have many peers which have not yet relayed a block.</span></div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="keywordflow">if</span> (a.<a class="code" href="structNodeEvictionCandidate.html#a13e9f6fa3d68cf3c428c18452302a3c6">nLastBlockTime</a> != b.<a class="code" href="structNodeEvictionCandidate.html#a13e9f6fa3d68cf3c428c18452302a3c6">nLastBlockTime</a>) <span class="keywordflow">return</span> a.<a class="code" href="structNodeEvictionCandidate.html#a13e9f6fa3d68cf3c428c18452302a3c6">nLastBlockTime</a> &lt; b.<a class="code" href="structNodeEvictionCandidate.html#a13e9f6fa3d68cf3c428c18452302a3c6">nLastBlockTime</a>;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">if</span> (a.<a class="code" href="structNodeEvictionCandidate.html#ac42a938f54389f748e532e4e09e190a5">fNetworkNode</a> != b.<a class="code" href="structNodeEvictionCandidate.html#ac42a938f54389f748e532e4e09e190a5">fNetworkNode</a>) <span class="keywordflow">return</span> b.<a class="code" href="structNodeEvictionCandidate.html#ac42a938f54389f748e532e4e09e190a5">fNetworkNode</a>;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">return</span> a.<a class="code" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">nTimeConnected</a> &gt; b.<a class="code" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">nTimeConnected</a>;</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;}</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160;</div><div class="line"><a name="l00907"></a><span class="lineno"><a class="line" href="net_8cpp.html#a8b9513c93cc783f979f926ef76c16b6e"> 907</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="net_8cpp.html#a8b9513c93cc783f979f926ef76c16b6e">CompareNodeTXTime</a>(<span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a> &amp;a, <span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a> &amp;b)</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160;{</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="comment">// There is a fall-through here because it is common for a node to have more than a few peers that have not yet relayed txn.</span></div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="keywordflow">if</span> (a.<a class="code" href="structNodeEvictionCandidate.html#ad86deabc890ea505a140613dd3b4d080">nLastTXTime</a> != b.<a class="code" href="structNodeEvictionCandidate.html#ad86deabc890ea505a140613dd3b4d080">nLastTXTime</a>) <span class="keywordflow">return</span> a.<a class="code" href="structNodeEvictionCandidate.html#ad86deabc890ea505a140613dd3b4d080">nLastTXTime</a> &lt; b.<a class="code" href="structNodeEvictionCandidate.html#ad86deabc890ea505a140613dd3b4d080">nLastTXTime</a>;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="keywordflow">if</span> (a.<a class="code" href="structNodeEvictionCandidate.html#ae731ffd18e237d5d4055a52fbbd231ac">fRelayTxes</a> != b.<a class="code" href="structNodeEvictionCandidate.html#ae731ffd18e237d5d4055a52fbbd231ac">fRelayTxes</a>) <span class="keywordflow">return</span> b.<a class="code" href="structNodeEvictionCandidate.html#ae731ffd18e237d5d4055a52fbbd231ac">fRelayTxes</a>;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">if</span> (a.<a class="code" href="structNodeEvictionCandidate.html#ae1d8441405e2878dfdd79e8f9c179b0a">fBloomFilter</a> != b.<a class="code" href="structNodeEvictionCandidate.html#ae1d8441405e2878dfdd79e8f9c179b0a">fBloomFilter</a>) <span class="keywordflow">return</span> a.<a class="code" href="structNodeEvictionCandidate.html#ae1d8441405e2878dfdd79e8f9c179b0a">fBloomFilter</a>;</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="keywordflow">return</span> a.<a class="code" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">nTimeConnected</a> &gt; b.<a class="code" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">nTimeConnected</a>;</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;}</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160;</div><div class="line"><a name="l00924"></a><span class="lineno"><a class="line" href="classCConnman.html#a1e4b04dc4c4502adbb735257cf757a66"> 924</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#a1e4b04dc4c4502adbb735257cf757a66">CConnman::AttemptToEvictConnection</a>()</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160;{</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; std::vector&lt;NodeEvictionCandidate&gt; vEvictionCandidates;</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; {</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.size(); ++i) {</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <a class="code" href="classCNode.html">CNode</a>* pnode = <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>[i];</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#ad3096c14b54aa39a02edb63a4a734c3e">fWhitelisted</a>)</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">if</span> (!pnode-&gt;<a class="code" href="classCNode.html#a64b2550ec558b6106ebc122d450ad35b">fInbound</a>)</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a>)</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; vEvictionCandidates.push_back(<a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a>(pnode));</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; }</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; }</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160;</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keywordflow">if</span> (vEvictionCandidates.empty()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="comment">// Protect connections with certain characteristics</span></div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="comment">// Deterministically select 4 peers to protect by netgroup.</span></div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="comment">// An attacker cannot predict which netgroups will be protected.</span></div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; std::sort(vEvictionCandidates.begin(), vEvictionCandidates.end(), <a class="code" href="net_8cpp.html#a296b4df8547a28aa11492eee4d0b300f">CompareKeyedNetGroup</a>);</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; vEvictionCandidates.erase(vEvictionCandidates.end() - std::min(4, static_cast&lt;int&gt;(vEvictionCandidates.size())), vEvictionCandidates.end());</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160;</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keywordflow">if</span> (vEvictionCandidates.empty()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="comment">// Protect the 8 nodes with the best ping times.</span></div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="comment">// An attacker cannot manipulate this metric without physically moving nodes closer to the target.</span></div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; std::sort(vEvictionCandidates.begin(), vEvictionCandidates.end(), <a class="code" href="net_8cpp.html#ae96c8b921771b8ffe774146180dcdfd0">ReverseCompareNodeMinPingTime</a>);</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; vEvictionCandidates.erase(vEvictionCandidates.end() - std::min(8, static_cast&lt;int&gt;(vEvictionCandidates.size())), vEvictionCandidates.end());</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160;</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">if</span> (vEvictionCandidates.empty()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="comment">// Protect 4 nodes that most recently sent us transactions.</span></div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="comment">// An attacker cannot manipulate this metric without performing useful work.</span></div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; std::sort(vEvictionCandidates.begin(), vEvictionCandidates.end(), <a class="code" href="net_8cpp.html#a8b9513c93cc783f979f926ef76c16b6e">CompareNodeTXTime</a>);</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; vEvictionCandidates.erase(vEvictionCandidates.end() - std::min(4, static_cast&lt;int&gt;(vEvictionCandidates.size())), vEvictionCandidates.end());</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keywordflow">if</span> (vEvictionCandidates.empty()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160;</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="comment">// Protect 4 nodes that most recently sent us blocks.</span></div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="comment">// An attacker cannot manipulate this metric without performing useful work.</span></div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; std::sort(vEvictionCandidates.begin(), vEvictionCandidates.end(), <a class="code" href="net_8cpp.html#a041f7af36ac1a8be9d6b01e1441c6144">CompareNodeBlockTime</a>);</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; vEvictionCandidates.erase(vEvictionCandidates.end() - std::min(4, static_cast&lt;int&gt;(vEvictionCandidates.size())), vEvictionCandidates.end());</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="keywordflow">if</span> (vEvictionCandidates.empty()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160;</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="comment">// Protect the half of the remaining nodes which have been connected the longest.</span></div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="comment">// This replicates the existing implicit behavior.</span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; std::sort(vEvictionCandidates.begin(), vEvictionCandidates.end(), <a class="code" href="net_8cpp.html#a56c574c7d0575da90992b4d9459130d5">ReverseCompareNodeTimeConnected</a>);</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; vEvictionCandidates.erase(vEvictionCandidates.end() - <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(vEvictionCandidates.size() / 2), vEvictionCandidates.end());</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="keywordflow">if</span> (vEvictionCandidates.empty()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="comment">// Identify the network group with the most connections and youngest member.</span></div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="comment">// (vEvictionCandidates is already sorted by reverse connect time)</span></div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; std::vector&lt;unsigned char&gt; naMostConnections;</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nMostConnections = 0;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; int64_t nMostConnectionsTime = 0;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; std::map&lt;std::vector&lt;unsigned char&gt;, std::vector&lt;NodeEvictionCandidate&gt; &gt; mapAddrCounts;</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; vEvictionCandidates.size(); ++i) {</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keyword">const</span> <a class="code" href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a>&amp; candidate = vEvictionCandidates[i];</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; mapAddrCounts[candidate.<a class="code" href="structNodeEvictionCandidate.html#a14bbf6be8778f2998fbad7883ffa0942">vchNetGroup</a>].push_back(candidate);</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; int64_t grouptime = mapAddrCounts[candidate.<a class="code" href="structNodeEvictionCandidate.html#a14bbf6be8778f2998fbad7883ffa0942">vchNetGroup</a>][0].<a class="code" href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">nTimeConnected</a>;</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <span class="keywordtype">size_t</span> groupsize = mapAddrCounts[candidate.<a class="code" href="structNodeEvictionCandidate.html#a14bbf6be8778f2998fbad7883ffa0942">vchNetGroup</a>].size();</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordflow">if</span> (groupsize &gt; nMostConnections || (groupsize == nMostConnections &amp;&amp; grouptime &gt; nMostConnectionsTime)) {</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; nMostConnections = groupsize;</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; nMostConnectionsTime = grouptime;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; naMostConnections = candidate.<a class="code" href="structNodeEvictionCandidate.html#a14bbf6be8778f2998fbad7883ffa0942">vchNetGroup</a>;</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; }</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; }</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="comment">// Reduce to the network group with the most connections</span></div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; std::vector&lt;NodeEvictionCandidate&gt; vEvictionNodes = mapAddrCounts[naMostConnections];</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">if</span>(vEvictionNodes.empty()) {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="comment">// Disconnect from the network group with the most connections</span></div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="keywordtype">int</span> nEvictionId = vEvictionNodes[0].id;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; {</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.size(); ++i) {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <a class="code" href="classCNode.html">CNode</a>* pnode = <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>[i];</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">if</span>(pnode-&gt;<a class="code" href="classCNode.html#af99591c635f495fc1e6c14745a2a4203">id</a> == nEvictionId) {</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; }</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; }</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; }</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;}</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div><div class="line"><a name="l01023"></a><span class="lineno"><a class="line" href="classCConnman.html#afe88b51d85f5b77fd38cd0be1d177891"> 1023</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#afe88b51d85f5b77fd38cd0be1d177891">CConnman::AcceptConnection</a>(<span class="keyword">const</span> <a class="code" href="structCConnman_1_1ListenSocket.html">ListenSocket</a>&amp; hListenSocket) {</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="keyword">struct </span>sockaddr_storage sockaddr;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; socklen_t len = <span class="keyword">sizeof</span>(sockaddr);</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <a class="code" href="compat_8h.html#a26ef1173e2f2c0d3db27eca28397d723">SOCKET</a> hSocket = accept(hListenSocket.<a class="code" href="structCConnman_1_1ListenSocket.html#a89f7b8ffa14007712f339484ac315fc9">socket</a>, (<span class="keyword">struct</span> sockaddr*)&amp;sockaddr, &amp;len);</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <a class="code" href="classCAddress.html">CAddress</a> addr;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordtype">int</span> nInbound = 0;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordtype">int</span> nMaxInbound = <a class="code" href="classCConnman.html#a92375a64d1f39823c26c839eb805137f">nMaxConnections</a> - (<a class="code" href="classCConnman.html#ac3d0e0de8d7ab3f3ac5674aea93389d3">nMaxOutbound</a> + <a class="code" href="classCConnman.html#af6353e401ae90d8621e768c4392b4e4f">nMaxFeeler</a>);</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">if</span> (hSocket != <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>)</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">if</span> (!addr.<a class="code" href="classCService.html#a77782219f5d85f326b4c089cb2636e6f">SetSockAddr</a>((<span class="keyword">const</span> <span class="keyword">struct</span> sockaddr*)&amp;sockaddr))</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;Warning: Unknown socket family\n&quot;</span>);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keywordtype">bool</span> whitelisted = hListenSocket.<a class="code" href="structCConnman_1_1ListenSocket.html#acbea1e39ba522ec6dbf318d5e3a75f87">whitelisted</a> || <a class="code" href="classCConnman.html#afe4088d5d272b05197b0c2cfeb9bc50b">IsWhitelistedRange</a>(addr);</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; {</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>)</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a64b2550ec558b6106ebc122d450ad35b">fInbound</a>)</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; nInbound++;</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; }</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keywordflow">if</span> (hSocket == <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>)</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; {</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <span class="keywordtype">int</span> nErr = <a class="code" href="compat_8h.html#a6d24fe3ab2906c21c373505ca244f90b">WSAGetLastError</a>();</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keywordflow">if</span> (nErr != <a class="code" href="compat_8h.html#a4ba23242bee4784b72a0a170e2f975a0">WSAEWOULDBLOCK</a>)</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;socket error accept failed: %s\n&quot;</span>, <a class="code" href="netbase_8cpp.html#a8ddb7d8d6e5b5cfabfdeea132f556977">NetworkErrorString</a>(nErr));</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; }</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a57501169f1faf1750efc6158f825b531">fNetworkActive</a>) {</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;connection from %s dropped: not accepting new connections\n&quot;</span>, addr.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>());</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(hSocket);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; }</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="compat_8h.html#a6bc22ed56c6264c63610e14d03a73423">IsSelectableSocket</a>(hSocket))</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; {</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;connection from %s dropped: non-selectable socket\n&quot;</span>, addr.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>());</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(hSocket);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; }</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="comment">// According to the internet TCP_NODELAY is not carried into accepted sockets</span></div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="comment">// on all platforms. Set it again here just to be sure.</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="keywordtype">int</span> <span class="keyword">set</span> = 1;</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; setsockopt(hSocket, IPPROTO_TCP, TCP_NODELAY, (<span class="keyword">const</span> <span class="keywordtype">char</span>*)&amp;<span class="keyword">set</span>, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; setsockopt(hSocket, IPPROTO_TCP, TCP_NODELAY, (<span class="keywordtype">void</span>*)&amp;<span class="keyword">set</span>, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#aa014a4c7bbfc843aa4fff786a2aa8c96">IsBanned</a>(addr) &amp;&amp; !whitelisted)</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; {</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;connection from %s dropped (banned)\n&quot;</span>, addr.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>());</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(hSocket);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; }</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keywordflow">if</span> (nInbound &gt;= nMaxInbound)</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; {</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a1e4b04dc4c4502adbb735257cf757a66">AttemptToEvictConnection</a>()) {</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="comment">// No connection to evict, disconnect the new connection</span></div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;failed to find an eviction candidate - connection dropped (full)\n&quot;</span>);</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(hSocket);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; }</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; }</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="comment">// don&#39;t accept incoming connections until fully synced</span></div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="util_8cpp.html#af26e0e38b52f08409d399c04cde68c22">fMasterNode</a> &amp;&amp; !<a class="code" href="masternode-sync_8cpp.html#a9807e6586e8a7cb25799ea4150520448">masternodeSync</a>.<a class="code" href="classCMasternodeSync.html#ab1f58bda356a30a15ae1733e238f188f">IsSynced</a>()) {</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;AcceptConnection -- masternode is not synced yet, skipping inbound connection attempt\n&quot;</span>);</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(hSocket);</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; }</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <a class="code" href="classCNode.html">CNode</a>* pnode = <span class="keyword">new</span> <a class="code" href="classCNode.html">CNode</a>(<a class="code" href="classCConnman.html#a3de904541eed55727886098885fc5c3b">GetNewNodeId</a>(), <a class="code" href="classCConnman.html#a246c1e7e5f8bb3e148a03177fd410517">nLocalServices</a>, <a class="code" href="classCConnman.html#a0f7d06bcc905778cbfab8ac33d8efe85">GetBestHeight</a>(), hSocket, addr, <span class="stringliteral">&quot;&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#ad3096c14b54aa39a02edb63a4a734c3e">fWhitelisted</a> = whitelisted;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <a class="code" href="net_8cpp.html#a475f2fc7d8f5cd7511db253cae8fe28a">GetNodeSignals</a>().<a class="code" href="structCNodeSignals.html#a1ce7c2d878dee3b81732b8ded51a7d6a">InitializeNode</a>(pnode, *<span class="keyword">this</span>);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;connection from %s accepted\n&quot;</span>, addr.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>());</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.push_back(pnode);</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; }</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;}</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;</div><div class="line"><a name="l01109"></a><span class="lineno"><a class="line" href="classCConnman.html#a765597cbfe99c083d8fa3d61bb464e34"> 1109</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a765597cbfe99c083d8fa3d61bb464e34">CConnman::ThreadSocketHandler</a>()</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;{</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nPrevNodeCount = 0;</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>)</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; {</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="comment">// Disconnect nodes</span></div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; {</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <span class="comment">// Disconnect unused nodes</span></div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; std::vector&lt;CNode*&gt; vNodesCopy = <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>;</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, vNodesCopy)</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; {</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a>)</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; {</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;ThreadSocketHandler -- removing node: peer=%d addr=%s nRefCount=%d fNetworkNode=%d fInbound=%d fMasternode=%d\n&quot;</span>,</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af99591c635f495fc1e6c14745a2a4203">id</a>, pnode-&gt;<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a>.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>(), pnode-&gt;<a class="code" href="classCNode.html#a72211aaf51af2e981e6b8a1deb73c836">GetRefCount</a>(), pnode-&gt;<a class="code" href="classCNode.html#a933adb2b192939545a01d602b1d7b53a">fNetworkNode</a>, pnode-&gt;<a class="code" href="classCNode.html#a64b2550ec558b6106ebc122d450ad35b">fInbound</a>, pnode-&gt;<a class="code" href="classCNode.html#a119824dcaebcd3c8e272a68f19a60c43">fMasternode</a>);</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <span class="comment">// remove from vNodes</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.erase(<span class="keyword">remove</span>(<a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.begin(), <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.end(), pnode), <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.end());</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="comment">// release outbound grant (if any)</span></div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a4bb25f8bdeeaff5e8cb08abc97bbc44d">grantOutbound</a>.<a class="code" href="classCSemaphoreGrant.html#a8d985eeace74e037baeb39bd2d586576">Release</a>();</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a604bf0cdcd13ec51a2d81976ec33c531">grantMasternodeOutbound</a>.<a class="code" href="classCSemaphoreGrant.html#a8d985eeace74e037baeb39bd2d586576">Release</a>();</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="comment">// close socket and cleanup</span></div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a63a6091a0b0fc0987d9436e1ec708423">CloseSocketDisconnect</a>();</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="comment">// hold in disconnected pool until all refs are released</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a933adb2b192939545a01d602b1d7b53a">fNetworkNode</a> || pnode-&gt;<a class="code" href="classCNode.html#a64b2550ec558b6106ebc122d450ad35b">fInbound</a>)</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af804bf7c7f9794e80a3b916e1befece9">Release</a>();</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a119824dcaebcd3c8e272a68f19a60c43">fMasternode</a>)</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af804bf7c7f9794e80a3b916e1befece9">Release</a>();</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <a class="code" href="classCConnman.html#a320b487f2f4437c2518cf6d2b37f95fd">vNodesDisconnected</a>.push_back(pnode);</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; }</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; }</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; }</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; {</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="comment">// Delete disconnected nodes</span></div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; std::list&lt;CNode*&gt; vNodesDisconnectedCopy = <a class="code" href="classCConnman.html#a320b487f2f4437c2518cf6d2b37f95fd">vNodesDisconnected</a>;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, vNodesDisconnectedCopy)</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; {</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="comment">// wait until threads are done using it</span></div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a72211aaf51af2e981e6b8a1deb73c836">GetRefCount</a>() &lt;= 0)</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="keywordtype">bool</span> fDelete = <span class="keyword">false</span>;</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; {</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <a class="code" href="sync_8h.html#aca08e7299069c2d60b8aa726fc550612">TRY_LOCK</a>(pnode-&gt;<a class="code" href="classCNode.html#a79edcac83fc5067567c7b41c26fcc56f">cs_vSend</a>, lockSend);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="keywordflow">if</span> (lockSend)</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; {</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <a class="code" href="sync_8h.html#aca08e7299069c2d60b8aa726fc550612">TRY_LOCK</a>(pnode-&gt;<a class="code" href="classCNode.html#a1e8b0784cc82f33edc2dc4e2834d1ff0">cs_inventory</a>, lockInv);</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keywordflow">if</span> (lockInv)</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; fDelete = <span class="keyword">true</span>;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; }</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="keywordflow">if</span> (fDelete)</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; {</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <a class="code" href="classCConnman.html#a320b487f2f4437c2518cf6d2b37f95fd">vNodesDisconnected</a>.remove(pnode);</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <a class="code" href="classCConnman.html#a1c476458d499d52f2c87c88d93082a9d">DeleteNode</a>(pnode);</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; }</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; }</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; }</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; }</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="keywordtype">size_t</span> vNodesSize;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; {</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; vNodesSize = <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.size();</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; }</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keywordflow">if</span>(vNodesSize != nPrevNodeCount) {</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; nPrevNodeCount = vNodesSize;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>)</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>-&gt;<a class="code" href="classCClientUIInterface.html#a496995d44db8dc3e3ef84d345e25967d">NotifyNumConnectionsChanged</a>(nPrevNodeCount);</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="comment">// Find which sockets have data to receive</span></div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="keyword">struct </span>timeval timeout;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; timeout.tv_sec = 0;</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; timeout.tv_usec = 50000; <span class="comment">// frequency to poll pnode-&gt;vSend</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; fd_set fdsetRecv;</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; fd_set fdsetSend;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; fd_set fdsetError;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; FD_ZERO(&amp;fdsetRecv);</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; FD_ZERO(&amp;fdsetSend);</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; FD_ZERO(&amp;fdsetError);</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <a class="code" href="compat_8h.html#a26ef1173e2f2c0d3db27eca28397d723">SOCKET</a> hSocketMax = 0;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="keywordtype">bool</span> have_fds = <span class="keyword">false</span>;</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> <a class="code" href="structCConnman_1_1ListenSocket.html">ListenSocket</a>&amp; hListenSocket, <a class="code" href="classCConnman.html#a6a8dd8e367c6342baf26c697d004906d">vhListenSocket</a>) {</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; FD_SET(hListenSocket.<a class="code" href="structCConnman_1_1ListenSocket.html#a89f7b8ffa14007712f339484ac315fc9">socket</a>, &amp;fdsetRecv);</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; hSocketMax = std::max(hSocketMax, hListenSocket.<a class="code" href="structCConnman_1_1ListenSocket.html#a89f7b8ffa14007712f339484ac315fc9">socket</a>);</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; have_fds = <span class="keyword">true</span>;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; }</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; {</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>)</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; {</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a> == <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>)</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; FD_SET(pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>, &amp;fdsetError);</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; hSocketMax = std::max(hSocketMax, pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>);</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; have_fds = <span class="keyword">true</span>;</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="comment">// Implement the following logic:</span></div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="comment">// * If there is data to send, select() for sending data. As this only</span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <span class="comment">// happens when optimistic write failed, we choose to first drain the</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="comment">// write buffer in this case before receiving more. This avoids</span></div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="comment">// needlessly queueing received data, if the remote peer is not themselves</span></div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="comment">// receiving data. This means properly utilizing TCP flow control signalling.</span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="comment">// * Otherwise, if there is space left in the receive buffer, select() for</span></div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="comment">// receiving data.</span></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="comment">// * Hand off all complete messages to the processor, to be handled without</span></div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; <span class="comment">// blocking here.</span></div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; {</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <a class="code" href="sync_8h.html#aca08e7299069c2d60b8aa726fc550612">TRY_LOCK</a>(pnode-&gt;<a class="code" href="classCNode.html#a79edcac83fc5067567c7b41c26fcc56f">cs_vSend</a>, lockSend);</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; <span class="keywordflow">if</span> (lockSend) {</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <span class="keywordflow">if</span> (!pnode-&gt;<a class="code" href="classCNode.html#a68e5fb1a80fe4247aa577a3c9a74b399">vSendMsg</a>.empty()) {</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; FD_SET(pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>, &amp;fdsetSend);</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; }</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; }</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; }</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; {</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; <span class="keywordflow">if</span> (!pnode-&gt;<a class="code" href="classCNode.html#a108e17226d76c85c89f7d057dad2b088">fPauseRecv</a>)</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; FD_SET(pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>, &amp;fdsetRecv);</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; }</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; }</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; }</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <span class="keywordtype">int</span> nSelect = select(have_fds ? hSocketMax + 1 : 0,</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; &amp;fdsetRecv, &amp;fdsetSend, &amp;fdsetError, &amp;timeout);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>)</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="keywordflow">if</span> (nSelect == <a class="code" href="compat_8h.html#a633b0396ff93d336a088412a190a5072">SOCKET_ERROR</a>)</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; {</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="keywordflow">if</span> (have_fds)</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; {</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keywordtype">int</span> nErr = <a class="code" href="compat_8h.html#a6d24fe3ab2906c21c373505ca244f90b">WSAGetLastError</a>();</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;socket select error %s\n&quot;</span>, <a class="code" href="netbase_8cpp.html#a8ddb7d8d6e5b5cfabfdeea132f556977">NetworkErrorString</a>(nErr));</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt;= hSocketMax; i++)</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; FD_SET(i, &amp;fdsetRecv);</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; }</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; FD_ZERO(&amp;fdsetSend);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; FD_ZERO(&amp;fdsetError);</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>.<a class="code" href="classCThreadInterrupt.html#a6118393076e75866a688bb64ef4a1e63">sleep_for</a>(std::chrono::milliseconds(timeout.tv_usec/1000)))</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; }</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <span class="comment">// Accept new connections</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> <a class="code" href="structCConnman_1_1ListenSocket.html">ListenSocket</a>&amp; hListenSocket, <a class="code" href="classCConnman.html#a6a8dd8e367c6342baf26c697d004906d">vhListenSocket</a>)</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; {</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; <span class="keywordflow">if</span> (hListenSocket.<a class="code" href="structCConnman_1_1ListenSocket.html#a89f7b8ffa14007712f339484ac315fc9">socket</a> != <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a> &amp;&amp; FD_ISSET(hListenSocket.<a class="code" href="structCConnman_1_1ListenSocket.html#a89f7b8ffa14007712f339484ac315fc9">socket</a>, &amp;fdsetRecv))</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; {</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <a class="code" href="classCConnman.html#afe88b51d85f5b77fd38cd0be1d177891">AcceptConnection</a>(hListenSocket);</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; }</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; }</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="comment">// Service each socket</span></div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; std::vector&lt;CNode*&gt; vNodesCopy = <a class="code" href="classCConnman.html#a658377e872bac0f15361b02f38e00bdd">CopyNodeVector</a>();</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, vNodesCopy)</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; {</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>)</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <span class="comment">// Receive</span></div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a> == <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>)</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keywordflow">if</span> (FD_ISSET(pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>, &amp;fdsetRecv) || FD_ISSET(pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>, &amp;fdsetError))</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; {</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; {</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; {</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="comment">// typical socket buffer is 8K-64K</span></div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="keywordtype">char</span> pchBuf[0x10000];</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="keywordtype">int</span> nBytes = recv(pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>, pchBuf, <span class="keyword">sizeof</span>(pchBuf), MSG_DONTWAIT);</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">if</span> (nBytes &gt; 0)</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; {</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="keywordtype">bool</span> notify = <span class="keyword">false</span>;</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <span class="keywordflow">if</span> (!pnode-&gt;<a class="code" href="classCNode.html#a7f39c9fe6b7975531cb9963846aed3e7">ReceiveMsgBytes</a>(pchBuf, nBytes, notify))</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a63a6091a0b0fc0987d9436e1ec708423">CloseSocketDisconnect</a>();</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <a class="code" href="classCConnman.html#ad38cc6cdc3b3767c2714452224895093">RecordBytesRecv</a>(nBytes);</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <span class="keywordflow">if</span> (notify) {</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordtype">size_t</span> nSizeAdded = 0;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <span class="keyword">auto</span> it(pnode-&gt;<a class="code" href="classCNode.html#a2f7a99d038591b007d709a17cbdae3dd">vRecvMsg</a>.begin());</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="keywordflow">for</span> (; it != pnode-&gt;<a class="code" href="classCNode.html#a2f7a99d038591b007d709a17cbdae3dd">vRecvMsg</a>.end(); ++it) {</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keywordflow">if</span> (!it-&gt;complete())</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; nSizeAdded += it-&gt;vRecv.size() + <a class="code" href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aadd8582d526addef583c978e5261dfec1">CMessageHeader::HEADER_SIZE</a>;</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; }</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; {</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(pnode-&gt;<a class="code" href="classCNode.html#a81d6deb661c7386a453e0966d2dbc36f">cs_vProcessMsg</a>);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#aca90abe62ee91e752d59981dd7c4f9ed">vProcessMsg</a>.splice(pnode-&gt;<a class="code" href="classCNode.html#aca90abe62ee91e752d59981dd7c4f9ed">vProcessMsg</a>.end(), pnode-&gt;<a class="code" href="classCNode.html#a2f7a99d038591b007d709a17cbdae3dd">vRecvMsg</a>, pnode-&gt;<a class="code" href="classCNode.html#a2f7a99d038591b007d709a17cbdae3dd">vRecvMsg</a>.begin(), it);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a30f76a69e956d342bdbb400541c98ccb">nProcessQueueSize</a> += nSizeAdded;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a108e17226d76c85c89f7d057dad2b088">fPauseRecv</a> = pnode-&gt;<a class="code" href="classCNode.html#a30f76a69e956d342bdbb400541c98ccb">nProcessQueueSize</a> &gt; <a class="code" href="classCConnman.html#a8855eb8f432a1fe07b2cc373cc9a3a50">nReceiveFloodSize</a>;</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; }</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <a class="code" href="classCConnman.html#a999ec42f1515f77096556c94c29c6538">WakeMessageHandler</a>();</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; }</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; }</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nBytes == 0)</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; {</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; <span class="comment">// socket closed gracefully</span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="keywordflow">if</span> (!pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a>)</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;socket closed\n&quot;</span>);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a63a6091a0b0fc0987d9436e1ec708423">CloseSocketDisconnect</a>();</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; }</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nBytes &lt; 0)</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; {</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <span class="comment">// error</span></div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <span class="keywordtype">int</span> nErr = <a class="code" href="compat_8h.html#a6d24fe3ab2906c21c373505ca244f90b">WSAGetLastError</a>();</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="keywordflow">if</span> (nErr != <a class="code" href="compat_8h.html#a4ba23242bee4784b72a0a170e2f975a0">WSAEWOULDBLOCK</a> &amp;&amp; nErr != <a class="code" href="compat_8h.html#a7ce1c171e08d68442124bf6189f8aec5">WSAEMSGSIZE</a> &amp;&amp; nErr != <a class="code" href="compat_8h.html#aef81890a7d46cb9dda85df9b96cba6b1">WSAEINTR</a> &amp;&amp; nErr != <a class="code" href="compat_8h.html#ada8711ffab59910a2732cfa4b7c24e29">WSAEINPROGRESS</a>)</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; {</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; <span class="keywordflow">if</span> (!pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a>)</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;socket recv error %s\n&quot;</span>, <a class="code" href="netbase_8cpp.html#a8ddb7d8d6e5b5cfabfdeea132f556977">NetworkErrorString</a>(nErr));</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a63a6091a0b0fc0987d9436e1ec708423">CloseSocketDisconnect</a>();</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; }</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; }</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; }</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; }</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; }</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <span class="comment">// Send</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a> == <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>)</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <span class="keywordflow">if</span> (FD_ISSET(pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>, &amp;fdsetSend))</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; {</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <a class="code" href="sync_8h.html#aca08e7299069c2d60b8aa726fc550612">TRY_LOCK</a>(pnode-&gt;<a class="code" href="classCNode.html#a79edcac83fc5067567c7b41c26fcc56f">cs_vSend</a>, lockSend);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <span class="keywordflow">if</span> (lockSend) {</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <span class="keywordtype">size_t</span> nBytes = <a class="code" href="classCConnman.html#a62a79bcc191112ab8ea87e860a16d2a2">SocketSendData</a>(pnode);</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; <span class="keywordflow">if</span> (nBytes) {</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; <a class="code" href="classCConnman.html#a494218531e4289a5c0b9c373890454c4">RecordBytesSent</a>(nBytes);</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; }</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; }</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; }</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <span class="comment">// Inactivity checking</span></div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; int64_t nTime = <a class="code" href="utiltime_8cpp.html#a1c4021a78be4eeffa05732694ab4bab0">GetSystemTimeInSeconds</a>();</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; <span class="keywordflow">if</span> (nTime - pnode-&gt;<a class="code" href="classCNode.html#abb39393ef08cb5668ded6cb14cdbc147">nTimeConnected</a> &gt; 60)</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; {</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#afb40f43a51ba686de93256727351af07">nLastRecv</a> == 0 || pnode-&gt;<a class="code" href="classCNode.html#af39253ad525733ca64ab3fc785dfc4eb">nLastSend</a> == 0)</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; {</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;socket no message in first 60 seconds, %d %d from %d\n&quot;</span>, pnode-&gt;<a class="code" href="classCNode.html#afb40f43a51ba686de93256727351af07">nLastRecv</a> != 0, pnode-&gt;<a class="code" href="classCNode.html#af39253ad525733ca64ab3fc785dfc4eb">nLastSend</a> != 0, pnode-&gt;<a class="code" href="classCNode.html#af99591c635f495fc1e6c14745a2a4203">id</a>);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; }</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nTime - pnode-&gt;<a class="code" href="classCNode.html#af39253ad525733ca64ab3fc785dfc4eb">nLastSend</a> &gt; <a class="code" href="net_8h.html#a7853d10884491eae33796656e1673fe3">TIMEOUT_INTERVAL</a>)</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; {</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;socket sending timeout: %is\n&quot;</span>, nTime - pnode-&gt;<a class="code" href="classCNode.html#af39253ad525733ca64ab3fc785dfc4eb">nLastSend</a>);</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; }</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nTime - pnode-&gt;<a class="code" href="classCNode.html#afb40f43a51ba686de93256727351af07">nLastRecv</a> &gt; (pnode-&gt;<a class="code" href="classCNode.html#a0a2cdd01cb730536adf1780c3df66430">nVersion</a> &gt; <a class="code" href="version_8h.html#aa3feca3b6094096fa1b660159bdcb04a">BIP0031_VERSION</a> ? <a class="code" href="net_8h.html#a7853d10884491eae33796656e1673fe3">TIMEOUT_INTERVAL</a> : 90*60))</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; {</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;socket receive timeout: %is\n&quot;</span>, nTime - pnode-&gt;<a class="code" href="classCNode.html#afb40f43a51ba686de93256727351af07">nLastRecv</a>);</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; }</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a9a077fbd09ddee1d81f027bc01a4ec68">nPingNonceSent</a> &amp;&amp; pnode-&gt;<a class="code" href="classCNode.html#a8352aa332af726ff117fb890c4dd3869">nPingUsecStart</a> + <a class="code" href="net_8h.html#a7853d10884491eae33796656e1673fe3">TIMEOUT_INTERVAL</a> * 1000000 &lt; <a class="code" href="utiltime_8cpp.html#a0c5a06b50cd805b1923552114494c029">GetTimeMicros</a>())</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; {</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;ping timeout: %fs\n&quot;</span>, 0.000001 * (<a class="code" href="utiltime_8cpp.html#a0c5a06b50cd805b1923552114494c029">GetTimeMicros</a>() - pnode-&gt;<a class="code" href="classCNode.html#a8352aa332af726ff117fb890c4dd3869">nPingUsecStart</a>));</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; }</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; }</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; }</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <a class="code" href="classCConnman.html#a8669942dafa1c3875e9899cd5dd87854">ReleaseNodeVector</a>(vNodesCopy);</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; }</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;}</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;</div><div class="line"><a name="l01387"></a><span class="lineno"><a class="line" href="classCConnman.html#a999ec42f1515f77096556c94c29c6538"> 1387</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a999ec42f1515f77096556c94c29c6538">CConnman::WakeMessageHandler</a>()</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;{</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; {</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; std::lock_guard&lt;std::mutex&gt; lock(<a class="code" href="classCConnman.html#a217b6ac63ee4b64199a2d11284d6bee4">mutexMsgProc</a>);</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <a class="code" href="classCConnman.html#a7a3ebcaa5b75e2e2e109af35e1c48c9d">fMsgProcWake</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; }</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; <a class="code" href="classCConnman.html#a03645ed0eb723430af180ad2ae36adc3">condMsgProc</a>.notify_one();</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;}</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;<span class="preprocessor">#ifdef USE_UPNP</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;<span class="keywordtype">void</span> ThreadMapPort()</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;{</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; std::string <a class="code" href="namespacezmq__sub.html#a84be4ecf90bb1177eb91ebfd0bc46e05">port</a> = <a class="code" href="tinyformat_8h.html#a56c674871a61baaad36ad52238c08857">strprintf</a>(<span class="stringliteral">&quot;%u&quot;</span>, <a class="code" href="net_8cpp.html#af6d341a24d761a509fca026458cf2f72">GetListenPort</a>());</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> * multicastif = 0;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> * minissdpdpath = 0;</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="keyword">struct </span>UPNPDev * devlist = 0;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; <span class="keywordtype">char</span> lanaddr[64];</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;<span class="preprocessor">#ifndef UPNPDISCOVER_SUCCESS</span></div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <span class="comment">/* miniupnpc 1.5 */</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0);</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;<span class="preprocessor">#elif MINIUPNPC_API_VERSION &lt; 14</span></div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; <span class="comment">/* miniupnpc 1.6 */</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="keywordtype">int</span> <a class="code" href="util_8h.html#af8985880cf4ef26df0a5aa2ffcb76662">error</a> = 0;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, &amp;<a class="code" href="util_8h.html#af8985880cf4ef26df0a5aa2ffcb76662">error</a>);</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; <span class="comment">/* miniupnpc 1.9.20150730 */</span></div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="keywordtype">int</span> <a class="code" href="util_8h.html#af8985880cf4ef26df0a5aa2ffcb76662">error</a> = 0;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, 2, &amp;<a class="code" href="util_8h.html#af8985880cf4ef26df0a5aa2ffcb76662">error</a>);</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <span class="keyword">struct </span>UPNPUrls urls;</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <span class="keyword">struct </span>IGDdatas <a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>;</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <span class="keywordtype">int</span> r;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; r = UPNP_GetValidIGD(devlist, &amp;urls, &amp;<a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>, lanaddr, <span class="keyword">sizeof</span>(lanaddr));</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="keywordflow">if</span> (r == 1)</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; {</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a37089835ec27ad8bf945a458708165b9">fDiscover</a>) {</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <span class="keywordtype">char</span> externalIPAddress[40];</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; r = UPNP_GetExternalIPAddress(urls.controlURL, <a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>.first.servicetype, externalIPAddress);</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; <span class="keywordflow">if</span>(r != UPNPCOMMAND_SUCCESS)</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;UPnP: GetExternalIPAddress() returned %d\n&quot;</span>, r);</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; {</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; <span class="keywordflow">if</span>(externalIPAddress[0])</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; {</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; <a class="code" href="classCNetAddr.html">CNetAddr</a> resolved;</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="netbase_8cpp.html#a3cdc8ba9f8d72752ff5cdd1e7407cdef">LookupHost</a>(externalIPAddress, resolved, <span class="keyword">false</span>)) {</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;UPnP: ExternalIPAddress = %s\n&quot;</span>, resolved.<a class="code" href="classCNetAddr.html#a474ea3874554fe3b79f607fdef97c243">ToString</a>().c_str());</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; <a class="code" href="net_8cpp.html#abb92a02eecc581e8927c8a6e31968645">AddLocal</a>(resolved, <a class="code" href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035daa28117b0df136a5a8b96c5e887e182a8">LOCAL_UPNP</a>);</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; }</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; }</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;UPnP: GetExternalIPAddress failed.\n&quot;</span>);</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; }</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; }</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; std::string strDesc = <span class="stringliteral">&quot;Dash Core &quot;</span> + <a class="code" href="clientversion_8cpp.html#ac3e3098552063f228d9deac38a8b9848">FormatFullVersion</a>();</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; <span class="keywordflow">try</span> {</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;<span class="preprocessor">#ifndef UPNPDISCOVER_SUCCESS</span></div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; <span class="comment">/* miniupnpc 1.5 */</span></div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; r = UPNP_AddPortMapping(urls.controlURL, <a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>.first.servicetype,</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; <a class="code" href="namespacezmq__sub.html#a84be4ecf90bb1177eb91ebfd0bc46e05">port</a>.c_str(), <a class="code" href="namespacezmq__sub.html#a84be4ecf90bb1177eb91ebfd0bc46e05">port</a>.c_str(), lanaddr, strDesc.c_str(), <span class="stringliteral">&quot;TCP&quot;</span>, 0);</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; <span class="comment">/* miniupnpc 1.6 */</span></div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; r = UPNP_AddPortMapping(urls.controlURL, <a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>.first.servicetype,</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; <a class="code" href="namespacezmq__sub.html#a84be4ecf90bb1177eb91ebfd0bc46e05">port</a>.c_str(), <a class="code" href="namespacezmq__sub.html#a84be4ecf90bb1177eb91ebfd0bc46e05">port</a>.c_str(), lanaddr, strDesc.c_str(), <span class="stringliteral">&quot;TCP&quot;</span>, 0, <span class="stringliteral">&quot;0&quot;</span>);</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <span class="keywordflow">if</span>(r!=UPNPCOMMAND_SUCCESS)</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;AddPortMapping(%s, %s, %s) failed with code %d (%s)\n&quot;</span>,</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; <a class="code" href="namespacezmq__sub.html#a84be4ecf90bb1177eb91ebfd0bc46e05">port</a>, <a class="code" href="namespacezmq__sub.html#a84be4ecf90bb1177eb91ebfd0bc46e05">port</a>, lanaddr, r, strupnperror(r));</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;UPnP Port Mapping successful.\n&quot;</span>);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <a class="code" href="utiltime_8cpp.html#ac635182d3e845eda4af4fa5ab31609da">MilliSleep</a>(20*60*1000); <span class="comment">// Refresh every 20 minutes</span></div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; }</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; }</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> boost::thread_interrupted&amp;)</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; {</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; r = UPNP_DeletePortMapping(urls.controlURL, <a class="code" href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">data</a>.first.servicetype, <a class="code" href="namespacezmq__sub.html#a84be4ecf90bb1177eb91ebfd0bc46e05">port</a>.c_str(), <span class="stringliteral">&quot;TCP&quot;</span>, 0);</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;UPNP_DeletePortMapping() returned: %d\n&quot;</span>, r);</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; freeUPNPDevlist(devlist); devlist = 0;</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; FreeUPNPUrls(&amp;urls);</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; <span class="keywordflow">throw</span>;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; }</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;No valid UPnP IGDs found\n&quot;</span>);</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; freeUPNPDevlist(devlist); devlist = 0;</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; <span class="keywordflow">if</span> (r != 0)</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; FreeUPNPUrls(&amp;urls);</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; }</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;}</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;<span class="keywordtype">void</span> <a class="code" href="net_8cpp.html#a93e4e6fbe288b6e882e697918695f88e">MapPort</a>(<span class="keywordtype">bool</span> fUseUPnP)</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;{</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="keyword">static</span> boost::thread* upnp_thread = NULL;</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <span class="keywordflow">if</span> (fUseUPnP)</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; {</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; <span class="keywordflow">if</span> (upnp_thread) {</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; upnp_thread-&gt;interrupt();</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; upnp_thread-&gt;join();</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="keyword">delete</span> upnp_thread;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; }</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; upnp_thread = <span class="keyword">new</span> boost::thread(boost::bind(&amp;<a class="code" href="util_8h.html#ac481a378af0229bf71e3d9fee7b938ad">TraceThread</a>&lt;<span class="keywordtype">void</span> (*)()&gt;, <span class="stringliteral">&quot;upnp&quot;</span>, &amp;ThreadMapPort));</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; }</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (upnp_thread) {</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; upnp_thread-&gt;interrupt();</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; upnp_thread-&gt;join();</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; <span class="keyword">delete</span> upnp_thread;</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; upnp_thread = NULL;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; }</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;}</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01511"></a><span class="lineno"><a class="line" href="net_8h.html#aa203b76a8cc98a5ec314c19a008b478d"> 1511</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="net_8cpp.html#a93e4e6fbe288b6e882e697918695f88e">MapPort</a>(<span class="keywordtype">bool</span>)</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;{</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="comment">// Intentionally left blank.</span></div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;}</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;</div><div class="line"><a name="l01522"></a><span class="lineno"><a class="line" href="classCConnman.html#aa7c6970ed98a4a7bafbc071d24897d13"> 1522</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#aa7c6970ed98a4a7bafbc071d24897d13">CConnman::ThreadDNSAddressSeed</a>()</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;{</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; <span class="comment">// goal: only query DNS seeds if address need is acute</span></div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <span class="keywordflow">if</span> ((<a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a244508e8463c4fdfd8b085fcb3b5a225">size</a>() &gt; 0) &amp;&amp;</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; (!<a class="code" href="util_8cpp.html#a64d956f1dda7f9a80ab5d594532b906d">GetBoolArg</a>(<span class="stringliteral">&quot;-forcednsseed&quot;</span>, <a class="code" href="net_8h.html#a48a4c7f4f3eac6c8c0f3c1c3fabbee69">DEFAULT_FORCEDNSSEED</a>))) {</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>.<a class="code" href="classCThreadInterrupt.html#a6118393076e75866a688bb64ef4a1e63">sleep_for</a>(std::chrono::seconds(11)))</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.size() &gt;= 2) {</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;P2P peers available. Skipped DNS seeding.\n&quot;</span>);</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; }</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; }</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; <span class="keyword">const</span> std::vector&lt;CDNSSeedData&gt; &amp;vSeeds = <a class="code" href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a>().<a class="code" href="classCChainParams.html#a402b8df138b265619217ddf934bbc67a">DNSSeeds</a>();</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <span class="keywordtype">int</span> found = 0;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;Loading addresses from DNS seeds (could take a while)\n&quot;</span>);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> <a class="code" href="structCDNSSeedData.html">CDNSSeedData</a> &amp;seed, vSeeds) {</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="netbase_8cpp.html#a4a0df7ebe15572508e61c38406e49732">HaveNameProxy</a>()) {</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <a class="code" href="classCConnman.html#afaf3119a1d1212256aa6f4b5763c29ca">AddOneShot</a>(seed.<a class="code" href="structCDNSSeedData.html#a70f5da8568016651cfb7ec7dbf01b3f0">host</a>);</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; std::vector&lt;CNetAddr&gt; vIPs;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; std::vector&lt;CAddress&gt; vAdd;</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="netbase_8cpp.html#a3cdc8ba9f8d72752ff5cdd1e7407cdef">LookupHost</a>(seed.<a class="code" href="structCDNSSeedData.html#a70f5da8568016651cfb7ec7dbf01b3f0">host</a>.c_str(), vIPs, 0, <span class="keyword">true</span>))</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; {</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a>&amp; ip, vIPs)</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; {</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <span class="keywordtype">int</span> nOneDay = 24*3600;</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <a class="code" href="classCAddress.html">CAddress</a> addr = <a class="code" href="classCAddress.html">CAddress</a>(<a class="code" href="classCService.html">CService</a>(ip, <a class="code" href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a>().GetDefaultPort()), <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537a9d1154f0e7e56f183a5c8373abe2e86c">NODE_NETWORK</a>);</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; addr.<a class="code" href="classCAddress.html#ac1c44aac968b11f90ce529b133ae4e9b">nTime</a> = <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>() - 3*nOneDay - <a class="code" href="random_8cpp.html#a27d9149d522b1fa87d84e5e9ca902aef">GetRand</a>(4*nOneDay); <span class="comment">// use a random age between 3 and 7 days old</span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; vAdd.push_back(addr);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; found++;</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; }</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; }</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; <span class="comment">// TODO: The seed name resolve may fail, yielding an IP of [::], which results in</span></div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; <span class="comment">// addrman assigning the same source to results from different seeds.</span></div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; <span class="comment">// This should switch to a hard-coded stable dummy IP for each seed name, so that the</span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <span class="comment">// resolve is not required at all.</span></div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; <span class="keywordflow">if</span> (!vIPs.empty()) {</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <a class="code" href="classCService.html">CService</a> seedSource;</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; <a class="code" href="netbase_8cpp.html#a56a2f4bcb9fb77b5efe358f804f642cc">Lookup</a>(seed.<a class="code" href="structCDNSSeedData.html#a2cf084b163340bd62b67e765799f1fdd">name</a>.c_str(), seedSource, 0, <span class="keyword">true</span>);</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a03fcc7109b5f014760dc50a81f68c5ec">Add</a>(vAdd, seedSource);</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; }</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; }</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; }</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;%d addresses found from DNS seeds\n&quot;</span>, found);</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;}</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;</div><div class="line"><a name="l01585"></a><span class="lineno"><a class="line" href="classCConnman.html#aefdc911e6c978574ec42051faeaea041"> 1585</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#aefdc911e6c978574ec42051faeaea041">CConnman::DumpAddresses</a>()</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;{</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; int64_t nStart = <a class="code" href="utiltime_8cpp.html#a139d0fe6387b9e230a9b8bb12d9b43b9">GetTimeMillis</a>();</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; <a class="code" href="classCAddrDB.html">CAddrDB</a> adb;</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; adb.<a class="code" href="classCAddrDB.html#aaec90dba59cd69a2f25bc5630a1dde39">Write</a>(<a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>);</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;Flushed %d addresses to peers.dat %dms\n&quot;</span>,</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a244508e8463c4fdfd8b085fcb3b5a225">size</a>(), <a class="code" href="utiltime_8cpp.html#a139d0fe6387b9e230a9b8bb12d9b43b9">GetTimeMillis</a>() - nStart);</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;}</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;</div><div class="line"><a name="l01596"></a><span class="lineno"><a class="line" href="classCConnman.html#ad59340080a38661aadeac522c2ccf656"> 1596</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#ad59340080a38661aadeac522c2ccf656">CConnman::DumpData</a>()</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;{</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; <a class="code" href="classCConnman.html#aefdc911e6c978574ec42051faeaea041">DumpAddresses</a>();</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; <a class="code" href="classCConnman.html#a6e729a956380ac422ab78d842e158df1">DumpBanlist</a>();</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;}</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;</div><div class="line"><a name="l01602"></a><span class="lineno"><a class="line" href="classCConnman.html#a161f1b41271db1a10cec61a825524b5d"> 1602</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a161f1b41271db1a10cec61a825524b5d">CConnman::ProcessOneShot</a>()</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;{</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; std::string strDest;</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; {</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#aedb5dff92cf5677c8465bb8ad43312e4">cs_vOneShots</a>);</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a59b3f6615a4e566b34920b6fbb747920">vOneShots</a>.empty())</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; strDest = <a class="code" href="classCConnman.html#a59b3f6615a4e566b34920b6fbb747920">vOneShots</a>.front();</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <a class="code" href="classCConnman.html#a59b3f6615a4e566b34920b6fbb747920">vOneShots</a>.pop_front();</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; }</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <a class="code" href="classCAddress.html">CAddress</a> addr;</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; <a class="code" href="classCSemaphoreGrant.html">CSemaphoreGrant</a> grant(*<a class="code" href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">semOutbound</a>, <span class="keyword">true</span>);</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; <span class="keywordflow">if</span> (grant) {</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a0cc39d54353d7edc2a57f4a4e4d0912a">OpenNetworkConnection</a>(addr, &amp;grant, strDest.c_str(), <span class="keyword">true</span>))</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; <a class="code" href="classCConnman.html#afaf3119a1d1212256aa6f4b5763c29ca">AddOneShot</a>(strDest);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; }</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;}</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;</div><div class="line"><a name="l01620"></a><span class="lineno"><a class="line" href="classCConnman.html#ac4c8cf5142f88565e789f3b173d89b3e"> 1620</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#ac4c8cf5142f88565e789f3b173d89b3e">CConnman::ThreadOpenConnections</a>()</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;{</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; <span class="comment">// Connect to specific addresses</span></div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="util_8cpp.html#a0502b74b88db99500ee21dcb446311e5">mapArgs</a>.count(<span class="stringliteral">&quot;-connect&quot;</span>) &amp;&amp; <a class="code" href="util_8cpp.html#a34d23466f937db99d45620bc7ea5d2fb">mapMultiArgs</a>[<span class="stringliteral">&quot;-connect&quot;</span>].size() &gt; 0)</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; {</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keywordflow">for</span> (int64_t nLoop = 0;; nLoop++)</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; {</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <a class="code" href="classCConnman.html#a161f1b41271db1a10cec61a825524b5d">ProcessOneShot</a>();</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> std::string&amp; strAddr, <a class="code" href="util_8cpp.html#a34d23466f937db99d45620bc7ea5d2fb">mapMultiArgs</a>[<span class="stringliteral">&quot;-connect&quot;</span>])</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; {</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <a class="code" href="classCAddress.html">CAddress</a> addr(<a class="code" href="classCService.html">CService</a>(), <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537a51f819cd0b9ac374d6950a29b4861398">NODE_NONE</a>);</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <a class="code" href="classCConnman.html#a0cc39d54353d7edc2a57f4a4e4d0912a">OpenNetworkConnection</a>(addr, NULL, strAddr.c_str());</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 10 &amp;&amp; i &lt; nLoop; i++)</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; {</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>.<a class="code" href="classCThreadInterrupt.html#a6118393076e75866a688bb64ef4a1e63">sleep_for</a>(std::chrono::milliseconds(500)))</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; }</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; }</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>.<a class="code" href="classCThreadInterrupt.html#a6118393076e75866a688bb64ef4a1e63">sleep_for</a>(std::chrono::milliseconds(500)))</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; }</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; }</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="comment">// Initiate network connections</span></div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; int64_t nStart = <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>();</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="comment">// Minimum time before next feeler connection (in microseconds).</span></div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; int64_t nNextFeeler = <a class="code" href="net_8cpp.html#a66c6216d339978932308c2d68edd5338">PoissonNextSend</a>(nStart*1000*1000, <a class="code" href="net_8h.html#a52479fcaa2103ab394bc6ba098abf269">FEELER_INTERVAL</a>);</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>)</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; {</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <a class="code" href="classCConnman.html#a161f1b41271db1a10cec61a825524b5d">ProcessOneShot</a>();</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>.<a class="code" href="classCThreadInterrupt.html#a6118393076e75866a688bb64ef4a1e63">sleep_for</a>(std::chrono::milliseconds(500)))</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; <a class="code" href="classCSemaphoreGrant.html">CSemaphoreGrant</a> grant(*<a class="code" href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">semOutbound</a>);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>)</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="comment">// Add seed nodes if DNS seeds are all down (an infrastructure attack?).</span></div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a244508e8463c4fdfd8b085fcb3b5a225">size</a>() == 0 &amp;&amp; (<a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>() - nStart &gt; 60)) {</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> done = <span class="keyword">false</span>;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; <span class="keywordflow">if</span> (!done) {</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;Adding fixed seed nodes as DNS doesn&#39;t seem to be available.\n&quot;</span>);</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <a class="code" href="classCNetAddr.html">CNetAddr</a> local;</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; <a class="code" href="netbase_8cpp.html#a3cdc8ba9f8d72752ff5cdd1e7407cdef">LookupHost</a>(<span class="stringliteral">&quot;127.0.0.1&quot;</span>, local, <span class="keyword">false</span>);</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a03fcc7109b5f014760dc50a81f68c5ec">Add</a>(<a class="code" href="net_8cpp.html#ae0d0a697455bede4a91f09af856e9146">convertSeed6</a>(<a class="code" href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a>().FixedSeeds()), local);</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; done = <span class="keyword">true</span>;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; }</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; }</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; <span class="comment">// Choose an address to connect to based on most recently seen</span></div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <a class="code" href="classCAddress.html">CAddress</a> addrConnect;</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <span class="comment">// Only connect out to one peer per network group (/16 for IPv4).</span></div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <span class="comment">// Do this here so we don&#39;t have to critsect vNodes inside mapAddresses critsect.</span></div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="keywordtype">int</span> nOutbound = 0;</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; std::set&lt;std::vector&lt;unsigned char&gt; &gt; setConnected;</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; {</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>) {</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; <span class="keywordflow">if</span> (!pnode-&gt;<a class="code" href="classCNode.html#a64b2550ec558b6106ebc122d450ad35b">fInbound</a> &amp;&amp; !pnode-&gt;<a class="code" href="classCNode.html#a119824dcaebcd3c8e272a68f19a60c43">fMasternode</a>) {</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; setConnected.insert(pnode-&gt;<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a>.<a class="code" href="classCNetAddr.html#a6f8211515f809f6972ce327433d41458">GetGroup</a>());</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; nOutbound++;</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; }</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; }</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; }</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; <span class="comment">// Feeler Connections</span></div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; <span class="comment">// Design goals:</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; <span class="comment">// * Increase the number of connectable addresses in the tried table.</span></div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; <span class="comment">// Method:</span></div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; <span class="comment">// * Choose a random address from new and attempt to connect to it if we can connect </span></div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; <span class="comment">// successfully it is added to tried.</span></div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; <span class="comment">// * Start attempting feeler connections only after node finishes making outbound </span></div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="comment">// connections.</span></div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; <span class="comment">// * Only make a feeler connection once every few minutes.</span></div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; <span class="keywordtype">bool</span> fFeeler = <span class="keyword">false</span>;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; <span class="keywordflow">if</span> (nOutbound &gt;= <a class="code" href="classCConnman.html#ac3d0e0de8d7ab3f3ac5674aea93389d3">nMaxOutbound</a>) {</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; int64_t nTime = <a class="code" href="utiltime_8cpp.html#a0c5a06b50cd805b1923552114494c029">GetTimeMicros</a>(); <span class="comment">// The current time right now (in microseconds).</span></div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; <span class="keywordflow">if</span> (nTime &gt; nNextFeeler) {</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; nNextFeeler = <a class="code" href="net_8cpp.html#a66c6216d339978932308c2d68edd5338">PoissonNextSend</a>(nTime, <a class="code" href="net_8h.html#a52479fcaa2103ab394bc6ba098abf269">FEELER_INTERVAL</a>);</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; fFeeler = <span class="keyword">true</span>;</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; }</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; }</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; int64_t nANow = <a class="code" href="timedata_8cpp.html#a09f81b9c7650f898cf3cf305b87547e6">GetAdjustedTime</a>();</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; <span class="keywordtype">int</span> nTries = 0;</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>)</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; {</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; <a class="code" href="classCAddrInfo.html">CAddrInfo</a> addr = <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a6279e9fdd1b78378c016087daf09a439">Select</a>(fFeeler);</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <span class="comment">// if we selected an invalid address, restart</span></div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <span class="keywordflow">if</span> (!addr.<a class="code" href="classCNetAddr.html#a6fe20b8da9701ca5dc2af078e2e8ac25">IsValid</a>() || setConnected.count(addr.<a class="code" href="classCNetAddr.html#a6f8211515f809f6972ce327433d41458">GetGroup</a>()) || <a class="code" href="net_8cpp.html#a16fa1bd4d34c4c29c90903fc3cdf7517">IsLocal</a>(addr))</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; <span class="comment">// If we didn&#39;t find an appropriate destination after trying 100 addresses fetched from addrman,</span></div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; <span class="comment">// stop this loop, and let the outer loop run again (which sleeps, adds seed nodes, recalculates</span></div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; <span class="comment">// already-connected network ranges, ...) before trying new addrman addresses.</span></div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; nTries++;</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; <span class="keywordflow">if</span> (nTries &gt; 100)</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a96eb2fba6d80870802ac787b6ada4beb">IsLimited</a>(addr))</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; <span class="comment">// only connect to full nodes</span></div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <span class="keywordflow">if</span> ((addr.<a class="code" href="classCAddress.html#a24e2309d92694a5a234751634bdf0458">nServices</a> &amp; <a class="code" href="net_8h.html#a99a450f0d7268ee95f310f2b78be3370">REQUIRED_SERVICES</a>) != <a class="code" href="net_8h.html#a99a450f0d7268ee95f310f2b78be3370">REQUIRED_SERVICES</a>)</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="comment">// only consider very recently tried nodes after 30 failed attempts</span></div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; <span class="keywordflow">if</span> (nANow - addr.<a class="code" href="classCAddrInfo.html#a4569955918c204d2edd073456108ddfd">nLastTry</a> &lt; 600 &amp;&amp; nTries &lt; 30)</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; <span class="comment">// do not allow non-default ports, unless after 50 invalid addresses selected already</span></div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; <span class="keywordflow">if</span> (addr.<a class="code" href="classCService.html#a71caa0d6aa6ab12758bde8b6a6bcfd2a">GetPort</a>() != <a class="code" href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a>().<a class="code" href="classCChainParams.html#a2e796bba356e7ce2040f545ea466754f">GetDefaultPort</a>() &amp;&amp; nTries &lt; 50)</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; addrConnect = addr;</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; }</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; <span class="keywordflow">if</span> (addrConnect.<a class="code" href="classCNetAddr.html#a6fe20b8da9701ca5dc2af078e2e8ac25">IsValid</a>()) {</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; <span class="keywordflow">if</span> (fFeeler) {</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; <span class="comment">// Add small amount of random noise before connection to avoid synchronization.</span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; <span class="keywordtype">int</span> randsleep = <a class="code" href="random_8cpp.html#a0e44e088732172da6662db2d5e37d4b2">GetRandInt</a>(<a class="code" href="net_8cpp.html#ac81652eef8570cad19735e421f756c64">FEELER_SLEEP_WINDOW</a> * 1000);</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>.<a class="code" href="classCThreadInterrupt.html#a6118393076e75866a688bb64ef4a1e63">sleep_for</a>(std::chrono::milliseconds(randsleep)))</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;Making feeler connection to %s\n&quot;</span>, addrConnect.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>());</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; }</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; <a class="code" href="classCConnman.html#a0cc39d54353d7edc2a57f4a4e4d0912a">OpenNetworkConnection</a>(addrConnect, &amp;grant, NULL, <span class="keyword">false</span>, fFeeler);</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; }</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; }</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;}</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;</div><div class="line"><a name="l01764"></a><span class="lineno"><a class="line" href="classCConnman.html#ad86a46ddbc6c99900d58ab89b65eaece"> 1764</a></span>&#160;std::vector&lt;AddedNodeInfo&gt; <a class="code" href="classCConnman.html#ad86a46ddbc6c99900d58ab89b65eaece">CConnman::GetAddedNodeInfo</a>()</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;{</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; std::vector&lt;AddedNodeInfo&gt; ret;</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; std::list&lt;std::string&gt; lAddresses(0);</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; {</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#af185d7f8ac4389a0247a47cf16e4610c">cs_vAddedNodes</a>);</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; ret.reserve(<a class="code" href="classCConnman.html#adb38e15b9237df805562255d3ee8fa7e">vAddedNodes</a>.size());</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> std::string&amp; strAddNode, <a class="code" href="classCConnman.html#adb38e15b9237df805562255d3ee8fa7e">vAddedNodes</a>)</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; lAddresses.push_back(strAddNode);</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; }</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; <span class="comment">// Build a map of all already connected addresses (by IP:port and by name) to inbound/outbound and resolved CService</span></div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; std::map&lt;CService, bool&gt; mapConnected;</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; std::map&lt;std::string, std::pair&lt;bool, CService&gt;&gt; mapConnectedByName;</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; {</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classCNode.html">CNode</a>* pnode : <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>) {</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;addr.IsValid()) {</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; mapConnected[pnode-&gt;addr] = pnode-&gt;fInbound;</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; }</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; <span class="keywordflow">if</span> (!pnode-&gt;addrName.empty()) {</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; mapConnectedByName[pnode-&gt;addrName] = std::make_pair(pnode-&gt;fInbound, static_cast&lt;const CService&amp;&gt;(pnode-&gt;addr));</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; }</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; }</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; }</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> std::string&amp; strAddNode, lAddresses) {</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160; <a class="code" href="classCService.html">CService</a> service(<a class="code" href="netbase_8cpp.html#a82f06e9cca43021fa1c4f234a7fe5e2a">LookupNumeric</a>(strAddNode.c_str(), <a class="code" href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a>().<a class="code" href="classCChainParams.html#a2e796bba356e7ce2040f545ea466754f">GetDefaultPort</a>()));</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; <span class="keywordflow">if</span> (service.<a class="code" href="classCNetAddr.html#a6fe20b8da9701ca5dc2af078e2e8ac25">IsValid</a>()) {</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; <span class="comment">// strAddNode is an IP:port</span></div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; <span class="keyword">auto</span> it = mapConnected.find(service);</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; <span class="keywordflow">if</span> (it != mapConnected.end()) {</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; ret.push_back(<a class="code" href="structAddedNodeInfo.html">AddedNodeInfo</a>{strAddNode, service, <span class="keyword">true</span>, it-&gt;second});</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; ret.push_back(<a class="code" href="structAddedNodeInfo.html">AddedNodeInfo</a>{strAddNode, <a class="code" href="classCService.html">CService</a>(), <span class="keyword">false</span>, <span class="keyword">false</span>});</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; }</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; <span class="comment">// strAddNode is a name</span></div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; <span class="keyword">auto</span> it = mapConnectedByName.find(strAddNode);</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; <span class="keywordflow">if</span> (it != mapConnectedByName.end()) {</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; ret.push_back(<a class="code" href="structAddedNodeInfo.html">AddedNodeInfo</a>{strAddNode, it-&gt;second.second, <span class="keyword">true</span>, it-&gt;second.first});</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; ret.push_back(<a class="code" href="structAddedNodeInfo.html">AddedNodeInfo</a>{strAddNode, <a class="code" href="classCService.html">CService</a>(), <span class="keyword">false</span>, <span class="keyword">false</span>});</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; }</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; }</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; }</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;}</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;</div><div class="line"><a name="l01816"></a><span class="lineno"><a class="line" href="classCConnman.html#a0b787caf95e52a346a2b31a580d60a62"> 1816</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a0b787caf95e52a346a2b31a580d60a62">CConnman::ThreadOpenAddedConnections</a>()</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;{</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160; {</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#af185d7f8ac4389a0247a47cf16e4610c">cs_vAddedNodes</a>);</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; <a class="code" href="classCConnman.html#adb38e15b9237df805562255d3ee8fa7e">vAddedNodes</a> = <a class="code" href="util_8cpp.html#a34d23466f937db99d45620bc7ea5d2fb">mapMultiArgs</a>[<span class="stringliteral">&quot;-addnode&quot;</span>];</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; }</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; <span class="keyword">true</span>; i++)</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; {</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; std::vector&lt;AddedNodeInfo&gt; vInfo = <a class="code" href="classCConnman.html#ad86a46ddbc6c99900d58ab89b65eaece">GetAddedNodeInfo</a>();</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="structAddedNodeInfo.html">AddedNodeInfo</a>&amp; info : vInfo) {</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; <span class="keywordflow">if</span> (!info.fConnected) {</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; <a class="code" href="classCSemaphoreGrant.html">CSemaphoreGrant</a> grant(*<a class="code" href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">semOutbound</a>);</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; <span class="comment">// If strAddedNode is an IP/port, decode it immediately, so</span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; <span class="comment">// OpenNetworkConnection can detect existing connections to that IP/port.</span></div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; <a class="code" href="classCService.html">CService</a> service(<a class="code" href="netbase_8cpp.html#a82f06e9cca43021fa1c4f234a7fe5e2a">LookupNumeric</a>(info.strAddedNode.c_str(), <a class="code" href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a>().<a class="code" href="classCChainParams.html#a2e796bba356e7ce2040f545ea466754f">GetDefaultPort</a>()));</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; <a class="code" href="classCConnman.html#a0cc39d54353d7edc2a57f4a4e4d0912a">OpenNetworkConnection</a>(<a class="code" href="classCAddress.html">CAddress</a>(service, <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537a51f819cd0b9ac374d6950a29b4861398">NODE_NONE</a>), &amp;grant, info.strAddedNode.c_str(), <span class="keyword">false</span>);</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>.<a class="code" href="classCThreadInterrupt.html#a6118393076e75866a688bb64ef4a1e63">sleep_for</a>(std::chrono::milliseconds(500)))</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; }</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; }</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>.<a class="code" href="classCThreadInterrupt.html#a6118393076e75866a688bb64ef4a1e63">sleep_for</a>(std::chrono::minutes(2)))</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; }</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;}</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;</div><div class="line"><a name="l01842"></a><span class="lineno"><a class="line" href="classCConnman.html#a12e5839242677181ea3633636670b062"> 1842</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a12e5839242677181ea3633636670b062">CConnman::ThreadMnbRequestConnections</a>()</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;{</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; <span class="comment">// Connecting to specific addresses, no masternode connections available</span></div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="util_8cpp.html#a0502b74b88db99500ee21dcb446311e5">mapArgs</a>.count(<span class="stringliteral">&quot;-connect&quot;</span>) &amp;&amp; <a class="code" href="util_8cpp.html#a34d23466f937db99d45620bc7ea5d2fb">mapMultiArgs</a>[<span class="stringliteral">&quot;-connect&quot;</span>].size() &gt; 0)</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>)</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; {</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>.<a class="code" href="classCThreadInterrupt.html#a6118393076e75866a688bb64ef4a1e63">sleep_for</a>(std::chrono::milliseconds(1000)))</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; <a class="code" href="classCSemaphoreGrant.html">CSemaphoreGrant</a> grant(*<a class="code" href="classCConnman.html#af869675d30f1c016912c7ebc2ec8e409">semMasternodeOutbound</a>);</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>)</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; std::pair&lt;CService, std::set&lt;uint256&gt; &gt; <a class="code" href="namespacerpc-tests.html#a5634cc986fc764eff8c617f53bf2e8dc">p</a> = <a class="code" href="masternodeman_8cpp.html#a2e783a9a58e9d1ee1535c9890ff48693">mnodeman</a>.<a class="code" href="classCMasternodeMan.html#ac3691f1c70af48026fc9c3bbb69197ee">PopScheduledMnbRequestConnection</a>();</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespacerpc-tests.html#a5634cc986fc764eff8c617f53bf2e8dc">p</a>.first == <a class="code" href="classCService.html">CService</a>() || <a class="code" href="namespacerpc-tests.html#a5634cc986fc764eff8c617f53bf2e8dc">p</a>.second.empty()) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; <a class="code" href="classCConnman.html#a3b31c247f9fc1c0f0d4e5f3482c667b3">ConnectNode</a>(<a class="code" href="classCAddress.html">CAddress</a>(<a class="code" href="namespacerpc-tests.html#a5634cc986fc764eff8c617f53bf2e8dc">p</a>.first, <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537a9d1154f0e7e56f183a5c8373abe2e86c">NODE_NETWORK</a>), NULL, <span class="keyword">true</span>);</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; <a class="code" href="classCNode.html">CNode</a> *pnode = <a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">FindNode</a>(<a class="code" href="namespacerpc-tests.html#a5634cc986fc764eff8c617f53bf2e8dc">p</a>.first);</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; <span class="keywordflow">if</span>(!pnode || pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160; grant.<a class="code" href="classCSemaphoreGrant.html#ab3e6f84f304703abc52517b0c8de26cf">MoveTo</a>(pnode-&gt;<a class="code" href="classCNode.html#a604bf0cdcd13ec51a2d81976ec33c531">grantMasternodeOutbound</a>);</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; <span class="comment">// compile request vector</span></div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; std::vector&lt;CInv&gt; vToFetch;</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; std::set&lt;uint256&gt;::iterator it = <a class="code" href="namespacerpc-tests.html#a5634cc986fc764eff8c617f53bf2e8dc">p</a>.second.begin();</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; <span class="keywordflow">while</span>(it != <a class="code" href="namespacerpc-tests.html#a5634cc986fc764eff8c617f53bf2e8dc">p</a>.second.end()) {</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; <span class="keywordflow">if</span>(*it != <a class="code" href="classuint256.html">uint256</a>()) {</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; vToFetch.push_back(<a class="code" href="classCInv.html">CInv</a>(<a class="code" href="protocol_8h.html#a16af7b253440dadd46a80a4b9fddba4da3a28db7deec3a185c981b159a7b235fc">MSG_MASTERNODE_ANNOUNCE</a>, *it));</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;masternode&quot;</span>, <span class="stringliteral">&quot;ThreadMnbRequestConnections -- asking for mnb %s from addr=%s\n&quot;</span>, it-&gt;ToString(), <a class="code" href="namespacerpc-tests.html#a5634cc986fc764eff8c617f53bf2e8dc">p</a>.first.ToString());</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; }</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; ++it;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; }</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; <span class="comment">// ask for data</span></div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; <a class="code" href="classCConnman.html#a7083075680ab1633003a4a5acb09b453">PushMessage</a>(pnode, <a class="code" href="namespaceNetMsgType.html#aa53772dc0dfe3dc5a6ac2c99444a2afe">NetMsgType::GETDATA</a>, vToFetch);</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; }</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;}</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;<span class="comment">// if successful, this moves the passed grant to the constructed node</span></div><div class="line"><a name="l01886"></a><span class="lineno"><a class="line" href="classCConnman.html#a0cc39d54353d7edc2a57f4a4e4d0912a"> 1886</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#a0cc39d54353d7edc2a57f4a4e4d0912a">CConnman::OpenNetworkConnection</a>(<span class="keyword">const</span> <a class="code" href="classCAddress.html">CAddress</a>&amp; addrConnect, <a class="code" href="classCSemaphoreGrant.html">CSemaphoreGrant</a> *grantOutbound, <span class="keyword">const</span> <span class="keywordtype">char</span> *pszDest, <span class="keywordtype">bool</span> fOneShot, <span class="keywordtype">bool</span> fFeeler)</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;{</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; <span class="comment">// Initiate outbound network connection</span></div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>) {</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; }</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCConnman.html#a57501169f1faf1750efc6158f825b531">fNetworkActive</a>) {</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; } </div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; <span class="keywordflow">if</span> (!pszDest) {</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a16fa1bd4d34c4c29c90903fc3cdf7517">IsLocal</a>(addrConnect) ||</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; <a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">FindNode</a>((<a class="code" href="classCNetAddr.html">CNetAddr</a>)addrConnect) || <a class="code" href="classCConnman.html#aa014a4c7bbfc843aa4fff786a2aa8c96">IsBanned</a>(addrConnect) ||</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160; <a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">FindNode</a>(addrConnect.ToStringIPPort()))</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">FindNode</a>(std::string(pszDest)))</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <a class="code" href="classCNode.html">CNode</a>* pnode = <a class="code" href="classCConnman.html#a3b31c247f9fc1c0f0d4e5f3482c667b3">ConnectNode</a>(addrConnect, pszDest);</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160; <span class="keywordflow">if</span> (!pnode)</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; <span class="keywordflow">if</span> (grantOutbound)</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; grantOutbound-&gt;<a class="code" href="classCSemaphoreGrant.html#ab3e6f84f304703abc52517b0c8de26cf">MoveTo</a>(pnode-&gt;<a class="code" href="classCNode.html#a4bb25f8bdeeaff5e8cb08abc97bbc44d">grantOutbound</a>);</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; <span class="keywordflow">if</span> (fOneShot)</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a2bb91c9968a9f855c05b1121100a8797">fOneShot</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; <span class="keywordflow">if</span> (fFeeler)</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a25c9b62c42159cc94c6e8ede9ad0ed9d">fFeeler</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;}</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;</div><div class="line"><a name="l01919"></a><span class="lineno"><a class="line" href="classCConnman.html#aacdbb7148575a31bb33bc345e2bf22a9"> 1919</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#aacdbb7148575a31bb33bc345e2bf22a9">CConnman::ThreadMessageHandler</a>()</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;{</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; <a class="code" href="util_8cpp.html#a8d620b8c9865456b925cd0eea4b2ffc1">SetThreadPriority</a>(<a class="code" href="compat_8h.html#aff5dd15d0754df75650eb9c3bfa5f86f">THREAD_PRIORITY_BELOW_NORMAL</a>);</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classCConnman.html#a2fdedb3739836bdc19590ad84960a3a6">flagInterruptMsgProc</a>)</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; {</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; std::vector&lt;CNode*&gt; vNodesCopy = <a class="code" href="classCConnman.html#a658377e872bac0f15361b02f38e00bdd">CopyNodeVector</a>();</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; <span class="keywordtype">bool</span> fMoreWork = <span class="keyword">false</span>;</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, vNodesCopy)</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; {</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a>)</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; <span class="comment">// Receive messages</span></div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; <span class="keywordtype">bool</span> fMoreNodeWork = <a class="code" href="net_8cpp.html#a475f2fc7d8f5cd7511db253cae8fe28a">GetNodeSignals</a>().<a class="code" href="structCNodeSignals.html#adbe101522cf1fd496a8fdf2667744f0f">ProcessMessages</a>(pnode, *<span class="keyword">this</span>, <a class="code" href="classCConnman.html#a2fdedb3739836bdc19590ad84960a3a6">flagInterruptMsgProc</a>);</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; fMoreWork |= (fMoreNodeWork &amp;&amp; !pnode-&gt;<a class="code" href="classCNode.html#a73b323f9e310e3054d909934b37ae671">fPauseSend</a>);</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a2fdedb3739836bdc19590ad84960a3a6">flagInterruptMsgProc</a>)</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; <span class="comment">// Send messages</span></div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; {</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; <a class="code" href="sync_8h.html#aca08e7299069c2d60b8aa726fc550612">TRY_LOCK</a>(pnode-&gt;<a class="code" href="classCNode.html#a79edcac83fc5067567c7b41c26fcc56f">cs_vSend</a>, lockSend);</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; <span class="keywordflow">if</span> (lockSend)</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; <a class="code" href="net_8cpp.html#a475f2fc7d8f5cd7511db253cae8fe28a">GetNodeSignals</a>().<a class="code" href="structCNodeSignals.html#ae96100eac4458c80929678cd6f58bc53">SendMessages</a>(pnode, *<span class="keyword">this</span>, <a class="code" href="classCConnman.html#a2fdedb3739836bdc19590ad84960a3a6">flagInterruptMsgProc</a>);</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; }</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a2fdedb3739836bdc19590ad84960a3a6">flagInterruptMsgProc</a>)</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; }</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160; <a class="code" href="classCConnman.html#a8669942dafa1c3875e9899cd5dd87854">ReleaseNodeVector</a>(vNodesCopy);</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; std::unique_lock&lt;std::mutex&gt; lock(<a class="code" href="classCConnman.html#a217b6ac63ee4b64199a2d11284d6bee4">mutexMsgProc</a>);</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; <span class="keywordflow">if</span> (!fMoreWork) {</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; <a class="code" href="classCConnman.html#a03645ed0eb723430af180ad2ae36adc3">condMsgProc</a>.wait_until(lock, std::chrono::steady_clock::now() + std::chrono::milliseconds(100), [<span class="keyword">this</span>] { <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a7a3ebcaa5b75e2e2e109af35e1c48c9d">fMsgProcWake</a>; });</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; }</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; <a class="code" href="classCConnman.html#a7a3ebcaa5b75e2e2e109af35e1c48c9d">fMsgProcWake</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; }</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;}</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;</div><div class="line"><a name="l01964"></a><span class="lineno"><a class="line" href="classCConnman.html#ad2f3516addf9e195688437021a8e3182"> 1964</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#ad2f3516addf9e195688437021a8e3182">CConnman::BindListenPort</a>(<span class="keyword">const</span> <a class="code" href="classCService.html">CService</a> &amp;addrBind, std::string&amp; strError, <span class="keywordtype">bool</span> fWhitelisted)</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;{</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; strError = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; <span class="keywordtype">int</span> nOne = 1;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; <span class="comment">// Create socket for listening for incoming connections</span></div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; <span class="keyword">struct </span>sockaddr_storage sockaddr;</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; socklen_t len = <span class="keyword">sizeof</span>(sockaddr);</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; <span class="keywordflow">if</span> (!addrBind.<a class="code" href="classCService.html#ac4c6d655fab3af40937f0b0c65581745">GetSockAddr</a>((<span class="keyword">struct</span> sockaddr*)&amp;sockaddr, &amp;len))</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; {</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; strError = <a class="code" href="tinyformat_8h.html#a56c674871a61baaad36ad52238c08857">strprintf</a>(<span class="stringliteral">&quot;Error: Bind address family for %s not supported&quot;</span>, addrBind.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>());</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;%s\n&quot;</span>, strError);</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; }</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; <a class="code" href="compat_8h.html#a26ef1173e2f2c0d3db27eca28397d723">SOCKET</a> hListenSocket = socket(((<span class="keyword">struct</span> sockaddr*)&amp;sockaddr)-&gt;sa_family, SOCK_STREAM, IPPROTO_TCP);</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; <span class="keywordflow">if</span> (hListenSocket == <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>)</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; {</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; strError = <a class="code" href="tinyformat_8h.html#a56c674871a61baaad36ad52238c08857">strprintf</a>(<span class="stringliteral">&quot;Error: Couldn&#39;t open socket for incoming connections (socket returned error %s)&quot;</span>, <a class="code" href="netbase_8cpp.html#a8ddb7d8d6e5b5cfabfdeea132f556977">NetworkErrorString</a>(<a class="code" href="compat_8h.html#a6d24fe3ab2906c21c373505ca244f90b">WSAGetLastError</a>()));</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;%s\n&quot;</span>, strError);</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; }</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="compat_8h.html#a6bc22ed56c6264c63610e14d03a73423">IsSelectableSocket</a>(hListenSocket))</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; {</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; strError = <span class="stringliteral">&quot;Error: Couldn&#39;t create a listenable socket for incoming connections&quot;</span>;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;%s\n&quot;</span>, strError);</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; }</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;<span class="preprocessor">#ifndef WIN32</span></div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;<span class="preprocessor">#ifdef SO_NOSIGPIPE</span></div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; <span class="comment">// Different way of disabling SIGPIPE on BSD</span></div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; setsockopt(hListenSocket, SOL_SOCKET, SO_NOSIGPIPE, (<span class="keywordtype">void</span>*)&amp;nOne, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; <span class="comment">// Allow binding if the port is still in TIME_WAIT state after</span></div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; <span class="comment">// the program was closed and restarted.</span></div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (<span class="keywordtype">void</span>*)&amp;nOne, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; <span class="comment">// Disable Nagle&#39;s algorithm</span></div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; setsockopt(hListenSocket, IPPROTO_TCP, TCP_NODELAY, (<span class="keywordtype">void</span>*)&amp;nOne, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (<span class="keyword">const</span> <span class="keywordtype">char</span>*)&amp;nOne, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; setsockopt(hListenSocket, IPPROTO_TCP, TCP_NODELAY, (<span class="keyword">const</span> <span class="keywordtype">char</span>*)&amp;nOne, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; <span class="comment">// Set to non-blocking, incoming connections will also inherit this</span></div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="netbase_8cpp.html#a6c44614cb5f9293d8419248a0b72d4b0">SetSocketNonBlocking</a>(hListenSocket, <span class="keyword">true</span>)) {</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; strError = <a class="code" href="tinyformat_8h.html#a56c674871a61baaad36ad52238c08857">strprintf</a>(<span class="stringliteral">&quot;BindListenPort: Setting listening socket to non-blocking failed, error %s\n&quot;</span>, <a class="code" href="netbase_8cpp.html#a8ddb7d8d6e5b5cfabfdeea132f556977">NetworkErrorString</a>(<a class="code" href="compat_8h.html#a6d24fe3ab2906c21c373505ca244f90b">WSAGetLastError</a>()));</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;%s\n&quot;</span>, strError);</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; }</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; <span class="comment">// some systems don&#39;t have IPV6_V6ONLY but are always v6only; others do have the option</span></div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; <span class="comment">// and enable it by default or not. Try to enable it, if possible.</span></div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; <span class="keywordflow">if</span> (addrBind.<a class="code" href="classCNetAddr.html#aad5f7a372c56ccf4d773f728b6b46e18">IsIPv6</a>()) {</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;<span class="preprocessor">#ifdef IPV6_V6ONLY</span></div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; setsockopt(hListenSocket, IPPROTO_IPV6, IPV6_V6ONLY, (<span class="keyword">const</span> <span class="keywordtype">char</span>*)&amp;nOne, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; setsockopt(hListenSocket, IPPROTO_IPV6, IPV6_V6ONLY, (<span class="keywordtype">void</span>*)&amp;nOne, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; <span class="keywordtype">int</span> nProtLevel = PROTECTION_LEVEL_UNRESTRICTED;</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; setsockopt(hListenSocket, IPPROTO_IPV6, IPV6_PROTECTION_LEVEL, (<span class="keyword">const</span> <span class="keywordtype">char</span>*)&amp;nProtLevel, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; }</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; <span class="keywordflow">if</span> (::bind(hListenSocket, (<span class="keyword">struct</span> sockaddr*)&amp;sockaddr, len) == <a class="code" href="compat_8h.html#a633b0396ff93d336a088412a190a5072">SOCKET_ERROR</a>)</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; {</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; <span class="keywordtype">int</span> nErr = <a class="code" href="compat_8h.html#a6d24fe3ab2906c21c373505ca244f90b">WSAGetLastError</a>();</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; <span class="keywordflow">if</span> (nErr == <a class="code" href="compat_8h.html#ae57d56be40e06a6148c41bb9c1f66eb6">WSAEADDRINUSE</a>)</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; strError = <a class="code" href="tinyformat_8h.html#a56c674871a61baaad36ad52238c08857">strprintf</a>(<a class="code" href="util_8h.html#aad133bb6103b53cebf03fd01e2f11ba1">_</a>(<span class="stringliteral">&quot;Unable to bind to %s on this computer. Dash Core is probably already running.&quot;</span>), addrBind.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>());</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; strError = <a class="code" href="tinyformat_8h.html#a56c674871a61baaad36ad52238c08857">strprintf</a>(<a class="code" href="util_8h.html#aad133bb6103b53cebf03fd01e2f11ba1">_</a>(<span class="stringliteral">&quot;Unable to bind to %s on this computer (bind returned error %s)&quot;</span>), addrBind.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>(), <a class="code" href="netbase_8cpp.html#a8ddb7d8d6e5b5cfabfdeea132f556977">NetworkErrorString</a>(nErr));</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;%s\n&quot;</span>, strError);</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(hListenSocket);</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; }</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;Bound to %s\n&quot;</span>, addrBind.<a class="code" href="classCService.html#ae274e8b6fc38955d74044d326a405024">ToString</a>());</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; <span class="comment">// Listen for incoming connections</span></div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; <span class="keywordflow">if</span> (listen(hListenSocket, SOMAXCONN) == <a class="code" href="compat_8h.html#a633b0396ff93d336a088412a190a5072">SOCKET_ERROR</a>)</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; {</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; strError = <a class="code" href="tinyformat_8h.html#a56c674871a61baaad36ad52238c08857">strprintf</a>(<a class="code" href="util_8h.html#aad133bb6103b53cebf03fd01e2f11ba1">_</a>(<span class="stringliteral">&quot;Error: Listening for incoming connections failed (listen returned error %s)&quot;</span>), <a class="code" href="netbase_8cpp.html#a8ddb7d8d6e5b5cfabfdeea132f556977">NetworkErrorString</a>(<a class="code" href="compat_8h.html#a6d24fe3ab2906c21c373505ca244f90b">WSAGetLastError</a>()));</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;%s\n&quot;</span>, strError);</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(hListenSocket);</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; }</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; <a class="code" href="classCConnman.html#a6a8dd8e367c6342baf26c697d004906d">vhListenSocket</a>.push_back(<a class="code" href="structCConnman_1_1ListenSocket.html">ListenSocket</a>(hListenSocket, fWhitelisted));</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; <span class="keywordflow">if</span> (addrBind.<a class="code" href="classCNetAddr.html#a4e3b2fea2a6151c76684b3812df4a5c3">IsRoutable</a>() &amp;&amp; <a class="code" href="net_8cpp.html#a37089835ec27ad8bf945a458708165b9">fDiscover</a> &amp;&amp; !fWhitelisted)</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; <a class="code" href="net_8cpp.html#abb92a02eecc581e8927c8a6e31968645">AddLocal</a>(addrBind, <a class="code" href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035daad42caef30be428cb73f7d2753b5162e">LOCAL_BIND</a>);</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;}</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;</div><div class="line"><a name="l02062"></a><span class="lineno"><a class="line" href="net_8h.html#a8316da05a5f15022dce5d0c2f82001fc"> 2062</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="net_8cpp.html#a8316da05a5f15022dce5d0c2f82001fc">Discover</a>(boost::thread_group&amp; threadGroup)</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;{</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="net_8cpp.html#a37089835ec27ad8bf945a458708165b9">fDiscover</a>)</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; <span class="comment">// Get local host IP</span></div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; <span class="keywordtype">char</span> pszHostName[256] = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; <span class="keywordflow">if</span> (gethostname(pszHostName, <span class="keyword">sizeof</span>(pszHostName)) != <a class="code" href="compat_8h.html#a633b0396ff93d336a088412a190a5072">SOCKET_ERROR</a>)</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; {</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; std::vector&lt;CNetAddr&gt; vaddr;</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="netbase_8cpp.html#a3cdc8ba9f8d72752ff5cdd1e7407cdef">LookupHost</a>(pszHostName, vaddr, 0, <span class="keyword">true</span>))</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; {</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; BOOST_FOREACH (<span class="keyword">const</span> <a class="code" href="classCNetAddr.html">CNetAddr</a> &amp;addr, vaddr)</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; {</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#abb92a02eecc581e8927c8a6e31968645">AddLocal</a>(addr, <a class="code" href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035dafa44f0377f6449a82e1e6176acfe44f7">LOCAL_IF</a>))</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;%s: %s - %s\n&quot;</span>, __func__, pszHostName, addr.<a class="code" href="classCNetAddr.html#a474ea3874554fe3b79f607fdef97c243">ToString</a>());</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; }</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; }</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; }</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; <span class="comment">// Get local host ip</span></div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; <span class="keyword">struct </span>ifaddrs* myaddrs;</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; <span class="keywordflow">if</span> (getifaddrs(&amp;myaddrs) == 0)</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; {</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">struct</span> ifaddrs* ifa = myaddrs; ifa != NULL; ifa = ifa-&gt;ifa_next)</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; {</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; <span class="keywordflow">if</span> (ifa-&gt;ifa_addr == NULL) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; <span class="keywordflow">if</span> ((ifa-&gt;ifa_flags &amp; IFF_UP) == 0) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; <span class="keywordflow">if</span> (strcmp(ifa-&gt;ifa_name, <span class="stringliteral">&quot;lo&quot;</span>) == 0) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; <span class="keywordflow">if</span> (strcmp(ifa-&gt;ifa_name, <span class="stringliteral">&quot;lo0&quot;</span>) == 0) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; <span class="keywordflow">if</span> (ifa-&gt;ifa_addr-&gt;sa_family == AF_INET)</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; {</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; <span class="keyword">struct </span>sockaddr_in* s4 = (<span class="keyword">struct </span>sockaddr_in*)(ifa-&gt;ifa_addr);</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; <a class="code" href="classCNetAddr.html">CNetAddr</a> addr(s4-&gt;sin_addr);</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#abb92a02eecc581e8927c8a6e31968645">AddLocal</a>(addr, <a class="code" href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035dafa44f0377f6449a82e1e6176acfe44f7">LOCAL_IF</a>))</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;%s: IPv4 %s: %s\n&quot;</span>, __func__, ifa-&gt;ifa_name, addr.<a class="code" href="classCNetAddr.html#a474ea3874554fe3b79f607fdef97c243">ToString</a>());</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; }</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ifa-&gt;ifa_addr-&gt;sa_family == AF_INET6)</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; {</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; <span class="keyword">struct </span>sockaddr_in6* s6 = (<span class="keyword">struct </span>sockaddr_in6*)(ifa-&gt;ifa_addr);</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; <a class="code" href="classCNetAddr.html">CNetAddr</a> addr(s6-&gt;sin6_addr);</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#abb92a02eecc581e8927c8a6e31968645">AddLocal</a>(addr, <a class="code" href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035dafa44f0377f6449a82e1e6176acfe44f7">LOCAL_IF</a>))</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;%s: IPv6 %s: %s\n&quot;</span>, __func__, ifa-&gt;ifa_name, addr.<a class="code" href="classCNetAddr.html#a474ea3874554fe3b79f607fdef97c243">ToString</a>());</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; }</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; }</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; freeifaddrs(myaddrs);</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; }</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;}</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;</div><div class="line"><a name="l02113"></a><span class="lineno"><a class="line" href="classCConnman.html#a9a7c3cfda53ccb9b9a33f4291043b47b"> 2113</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a9a7c3cfda53ccb9b9a33f4291043b47b">CConnman::SetNetworkActive</a>(<span class="keywordtype">bool</span> active)</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;{</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="util_8cpp.html#a2ba7badc843121dde40a6f109d224a42">fDebug</a>) {</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;SetNetworkActive: %s\n&quot;</span>, active);</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; }</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; <span class="keywordflow">if</span> (!active) {</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; <a class="code" href="classCConnman.html#a57501169f1faf1750efc6158f825b531">fNetworkActive</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; <span class="comment">// Close sockets to all nodes</span></div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>) {</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a63a6091a0b0fc0987d9436e1ec708423">CloseSocketDisconnect</a>();</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; }</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; <a class="code" href="classCConnman.html#a57501169f1faf1750efc6158f825b531">fNetworkActive</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160; }</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; <a class="code" href="init_8cpp.html#a4fe31b510fc1c2b95321cedb9f89e8de">uiInterface</a>.<a class="code" href="classCClientUIInterface.html#addd7f774fd2ffc49b3c1b903f12aa4a0">NotifyNetworkActiveChanged</a>(<a class="code" href="classCConnman.html#a57501169f1faf1750efc6158f825b531">fNetworkActive</a>);</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;}</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;</div><div class="line"><a name="l02134"></a><span class="lineno"><a class="line" href="classCConnman.html#af15272cb307fd9128a6099487ae9a8c7"> 2134</a></span>&#160;<a class="code" href="classCConnman.html#af15272cb307fd9128a6099487ae9a8c7">CConnman::CConnman</a>()</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;{</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; <a class="code" href="classCConnman.html#a57501169f1faf1750efc6158f825b531">fNetworkActive</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; <a class="code" href="classCConnman.html#a1c714c44a6c870c08deddb267eaccba1">setBannedIsDirty</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; <a class="code" href="classCConnman.html#ab07810a88d9b1d7a0309509cf0cadd57">fAddressesInitialized</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; <a class="code" href="classCConnman.html#a45b6e23a40a19f9cc3d092fb5e08e6fd">nLastNodeId</a> = 0;</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; <a class="code" href="classCConnman.html#ade433492622155412824555e850e3ed9">nSendBufferMaxSize</a> = 0;</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; <a class="code" href="classCConnman.html#a8855eb8f432a1fe07b2cc373cc9a3a50">nReceiveFloodSize</a> = 0;</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; <a class="code" href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">semOutbound</a> = NULL;</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; <a class="code" href="classCConnman.html#af869675d30f1c016912c7ebc2ec8e409">semMasternodeOutbound</a> = NULL;</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160; <a class="code" href="classCConnman.html#a92375a64d1f39823c26c839eb805137f">nMaxConnections</a> = 0;</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; <a class="code" href="classCConnman.html#ac3d0e0de8d7ab3f3ac5674aea93389d3">nMaxOutbound</a> = 0;</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; <a class="code" href="classCConnman.html#ac88ba00355f9d1870e216075a8f2c85c">nBestHeight</a> = 0;</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; <a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a> = NULL;</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; <a class="code" href="classCConnman.html#a2fdedb3739836bdc19590ad84960a3a6">flagInterruptMsgProc</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;}</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;</div><div class="line"><a name="l02151"></a><span class="lineno"><a class="line" href="classCConnman.html#a3de904541eed55727886098885fc5c3b"> 2151</a></span>&#160;<a class="code" href="net_8h.html#a954d746a58632565552615fd0a4ee660">NodeId</a> <a class="code" href="classCConnman.html#a3de904541eed55727886098885fc5c3b">CConnman::GetNewNodeId</a>()</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;{</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a45b6e23a40a19f9cc3d092fb5e08e6fd">nLastNodeId</a>.fetch_add(1, std::memory_order_relaxed);</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;}</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;</div><div class="line"><a name="l02156"></a><span class="lineno"><a class="line" href="classCConnman.html#a80caf4db74fcf515068f169e085ff84e"> 2156</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#a80caf4db74fcf515068f169e085ff84e">CConnman::Start</a>(<a class="code" href="classCScheduler.html">CScheduler</a>&amp; scheduler, std::string&amp; strNodeError, <a class="code" href="structCConnman_1_1Options.html">Options</a> connOptions)</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;{</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; <a class="code" href="classCConnman.html#a78fc6a51fab2550bf73787cf1eea2a3c">nTotalBytesRecv</a> = 0;</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; <a class="code" href="classCConnman.html#a492f8afd8cbd66b16401727d2f521e43">nTotalBytesSent</a> = 0;</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; <a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a> = 0;</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; <a class="code" href="classCConnman.html#a8c2ade2114997b11a70c881456439529">nMaxOutboundTotalBytesSentInCycle</a> = 0;</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; <a class="code" href="classCConnman.html#a626cf5fd895a959c73f7b77acc1a18a8">nMaxOutboundTimeframe</a> = 60*60*24; <span class="comment">//1 day</span></div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; <a class="code" href="classCConnman.html#a8c360ad2471ad7287b27f944aa382441">nMaxOutboundCycleStartTime</a> = 0;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; <a class="code" href="classCConnman.html#a6305756f9622612ff70f3453a385535e">nRelevantServices</a> = connOptions.<a class="code" href="structCConnman_1_1Options.html#aac4a45ec513fe972d3060f93c92e951f">nRelevantServices</a>;</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; <a class="code" href="classCConnman.html#a246c1e7e5f8bb3e148a03177fd410517">nLocalServices</a> = connOptions.<a class="code" href="structCConnman_1_1Options.html#a857dbc21954a6613fe0a3939521ae8c8">nLocalServices</a>;</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160; <a class="code" href="classCConnman.html#a92375a64d1f39823c26c839eb805137f">nMaxConnections</a> = connOptions.<a class="code" href="structCConnman_1_1Options.html#a83e2addcfd43683ff69eef0d61c38135">nMaxConnections</a>;</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160; <a class="code" href="classCConnman.html#ac3d0e0de8d7ab3f3ac5674aea93389d3">nMaxOutbound</a> = std::min((connOptions.<a class="code" href="structCConnman_1_1Options.html#a48c33ead9af87461d5d4023e1e34ade2">nMaxOutbound</a>), <a class="code" href="classCConnman.html#a92375a64d1f39823c26c839eb805137f">nMaxConnections</a>);</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160; <a class="code" href="classCConnman.html#af6353e401ae90d8621e768c4392b4e4f">nMaxFeeler</a> = connOptions.<a class="code" href="structCConnman_1_1Options.html#a63829fe8ee352b187f14307ce9c4c8b6">nMaxFeeler</a>;</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; <a class="code" href="classCConnman.html#ade433492622155412824555e850e3ed9">nSendBufferMaxSize</a> = connOptions.<a class="code" href="structCConnman_1_1Options.html#ab6e4a5465dcc41b7ba131ce04fb35ac3">nSendBufferMaxSize</a>;</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; <a class="code" href="classCConnman.html#a8855eb8f432a1fe07b2cc373cc9a3a50">nReceiveFloodSize</a> = connOptions.<a class="code" href="structCConnman_1_1Options.html#a0b7a96aca7f3b38561ac6eb85702440e">nReceiveFloodSize</a>;</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; <a class="code" href="classCConnman.html#a36cf799d267785276497583398dfd4cd">SetBestHeight</a>(connOptions.<a class="code" href="structCConnman_1_1Options.html#a4b779b0f0eba5f2cf82f431123466df5">nBestHeight</a>);</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; <a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a> = connOptions.<a class="code" href="structCConnman_1_1Options.html#a4175e08ea3b9ee7d651824b6d92f1e9b">uiInterface</a>;</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>)</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; <a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>-&gt;<a class="code" href="classCClientUIInterface.html#abc63cc3f3e5e15632f713d859dbc6bc2">InitMessage</a>(<a class="code" href="util_8h.html#aad133bb6103b53cebf03fd01e2f11ba1">_</a>(<span class="stringliteral">&quot;Loading addresses...&quot;</span>));</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; <span class="comment">// Load addresses from peers.dat</span></div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160; int64_t nStart = <a class="code" href="utiltime_8cpp.html#a139d0fe6387b9e230a9b8bb12d9b43b9">GetTimeMillis</a>();</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; {</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; <a class="code" href="classCAddrDB.html">CAddrDB</a> adb;</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160; <span class="keywordflow">if</span> (adb.<a class="code" href="classCAddrDB.html#aed4b567fb7c2dd15b2856e7c769967b7">Read</a>(<a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>))</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;Loaded %i addresses from peers.dat %dms\n&quot;</span>, <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a244508e8463c4fdfd8b085fcb3b5a225">size</a>(), <a class="code" href="utiltime_8cpp.html#a139d0fe6387b9e230a9b8bb12d9b43b9">GetTimeMillis</a>() - nStart);</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a53c27520b7f8c6fa817c2fa869dd4e25">Clear</a>(); <span class="comment">// Addrman can be in an inconsistent state after failure, reset it</span></div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;Invalid or missing peers.dat; recreating\n&quot;</span>);</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160; <a class="code" href="classCConnman.html#aefdc911e6c978574ec42051faeaea041">DumpAddresses</a>();</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; }</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; }</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>)</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160; <a class="code" href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">clientInterface</a>-&gt;<a class="code" href="classCClientUIInterface.html#abc63cc3f3e5e15632f713d859dbc6bc2">InitMessage</a>(<a class="code" href="util_8h.html#aad133bb6103b53cebf03fd01e2f11ba1">_</a>(<span class="stringliteral">&quot;Loading banlist...&quot;</span>));</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160; <span class="comment">// Load addresses from banlist.dat</span></div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; nStart = <a class="code" href="utiltime_8cpp.html#a139d0fe6387b9e230a9b8bb12d9b43b9">GetTimeMillis</a>();</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160; <a class="code" href="classCBanDB.html">CBanDB</a> bandb;</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160; <a class="code" href="addrdb_8h.html#af9675d81650e48d20ae495adf73da102">banmap_t</a> banmap;</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160; <span class="keywordflow">if</span> (bandb.<a class="code" href="classCBanDB.html#aa3bb0e398409c933bf79a9af56c807f2">Read</a>(banmap)) {</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160; <a class="code" href="classCConnman.html#ae6697e1fd73e7d7cff3a699fe2034345">SetBanned</a>(banmap); <span class="comment">// thread save setter</span></div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160; <a class="code" href="classCConnman.html#a6006659dcdda45215102e5982d4879a1">SetBannedSetDirty</a>(<span class="keyword">false</span>); <span class="comment">// no need to write down, just read data</span></div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160; <a class="code" href="classCConnman.html#a0695d37447e19cfde25be7e9b7f13f67">SweepBanned</a>(); <span class="comment">// sweep out unused entries</span></div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;Loaded %d banned node ips/subnets from banlist.dat %dms\n&quot;</span>,</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; banmap.size(), <a class="code" href="utiltime_8cpp.html#a139d0fe6387b9e230a9b8bb12d9b43b9">GetTimeMillis</a>() - nStart);</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;Invalid or missing banlist.dat; recreating\n&quot;</span>);</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; <a class="code" href="classCConnman.html#a6006659dcdda45215102e5982d4879a1">SetBannedSetDirty</a>(<span class="keyword">true</span>); <span class="comment">// force write</span></div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; <a class="code" href="classCConnman.html#a6e729a956380ac422ab78d842e158df1">DumpBanlist</a>();</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; }</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; <a class="code" href="classCConnman.html#ab07810a88d9b1d7a0309509cf0cadd57">fAddressesInitialized</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">semOutbound</a> == NULL) {</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; <span class="comment">// initialize semaphore</span></div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; <a class="code" href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">semOutbound</a> = <span class="keyword">new</span> <a class="code" href="classCSemaphore.html">CSemaphore</a>(std::min((<a class="code" href="classCConnman.html#ac3d0e0de8d7ab3f3ac5674aea93389d3">nMaxOutbound</a> + <a class="code" href="classCConnman.html#af6353e401ae90d8621e768c4392b4e4f">nMaxFeeler</a>), <a class="code" href="classCConnman.html#a92375a64d1f39823c26c839eb805137f">nMaxConnections</a>));</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160; }</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#af869675d30f1c016912c7ebc2ec8e409">semMasternodeOutbound</a> == NULL) {</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160; <span class="comment">// initialize semaphore</span></div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160; <a class="code" href="classCConnman.html#af869675d30f1c016912c7ebc2ec8e409">semMasternodeOutbound</a> = <span class="keyword">new</span> <a class="code" href="classCSemaphore.html">CSemaphore</a>(<a class="code" href="net_8h.html#a58a39fe81582f307b3165d13dc7dcf2f">MAX_OUTBOUND_MASTERNODE_CONNECTIONS</a>);</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160; }</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="net_8cpp.html#a1e6c74cfb67940ce1cf68ac2b2934011">pnodeLocalHost</a> == NULL) {</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160; <a class="code" href="classCNetAddr.html">CNetAddr</a> local;</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160; <a class="code" href="netbase_8cpp.html#a3cdc8ba9f8d72752ff5cdd1e7407cdef">LookupHost</a>(<span class="stringliteral">&quot;127.0.0.1&quot;</span>, local, <span class="keyword">false</span>);</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160; <a class="code" href="net_8cpp.html#a1e6c74cfb67940ce1cf68ac2b2934011">pnodeLocalHost</a> = <span class="keyword">new</span> <a class="code" href="classCNode.html">CNode</a>(<a class="code" href="classCConnman.html#a3de904541eed55727886098885fc5c3b">GetNewNodeId</a>(), <a class="code" href="classCConnman.html#a246c1e7e5f8bb3e148a03177fd410517">nLocalServices</a>, <a class="code" href="classCConnman.html#a0f7d06bcc905778cbfab8ac33d8efe85">GetBestHeight</a>(), <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>, <a class="code" href="classCAddress.html">CAddress</a>(<a class="code" href="classCService.html">CService</a>(local, 0), <a class="code" href="classCConnman.html#a246c1e7e5f8bb3e148a03177fd410517">nLocalServices</a>));</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160; <a class="code" href="net_8cpp.html#a475f2fc7d8f5cd7511db253cae8fe28a">GetNodeSignals</a>().<a class="code" href="structCNodeSignals.html#a1ce7c2d878dee3b81732b8ded51a7d6a">InitializeNode</a>(<a class="code" href="net_8cpp.html#a1e6c74cfb67940ce1cf68ac2b2934011">pnodeLocalHost</a>, *<span class="keyword">this</span>);</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160; }</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160; <span class="comment">// Start threads</span></div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160; <a class="code" href="netbase_8cpp.html#a851a9917fb3475698f6632cfee0b4e23">InterruptSocks5</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160; <a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>.<a class="code" href="classCThreadInterrupt.html#a399a6b881ef3e107eb956239679c5026">reset</a>();</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; <a class="code" href="classCConnman.html#a2fdedb3739836bdc19590ad84960a3a6">flagInterruptMsgProc</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160; {</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160; std::unique_lock&lt;std::mutex&gt; lock(<a class="code" href="classCConnman.html#a217b6ac63ee4b64199a2d11284d6bee4">mutexMsgProc</a>);</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160; <a class="code" href="classCConnman.html#a7a3ebcaa5b75e2e2e109af35e1c48c9d">fMsgProcWake</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160; }</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160; <span class="comment">// Send and receive from sockets, accept connections</span></div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160; <a class="code" href="classCConnman.html#af71dbf1403017b3cdb88ee222c2ca9a4">threadSocketHandler</a> = std::thread(&amp;<a class="code" href="util_8h.html#ac481a378af0229bf71e3d9fee7b938ad">TraceThread</a>&lt;std::function&lt;<span class="keywordtype">void</span>()&gt; &gt;, <span class="stringliteral">&quot;net&quot;</span>, std::function&lt;<span class="keywordtype">void</span>()&gt;(std::bind(&amp;<a class="code" href="classCConnman.html#a765597cbfe99c083d8fa3d61bb464e34">CConnman::ThreadSocketHandler</a>, <span class="keyword">this</span>)));</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160;</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="util_8cpp.html#a64d956f1dda7f9a80ab5d594532b906d">GetBoolArg</a>(<span class="stringliteral">&quot;-dnsseed&quot;</span>, <span class="keyword">true</span>))</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;DNS seeding disabled\n&quot;</span>);</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160; <a class="code" href="classCConnman.html#a4ee3395b9ce47619ba794649ee86014b">threadDNSAddressSeed</a> = std::thread(&amp;<a class="code" href="util_8h.html#ac481a378af0229bf71e3d9fee7b938ad">TraceThread</a>&lt;std::function&lt;<span class="keywordtype">void</span>()&gt; &gt;, <span class="stringliteral">&quot;dnsseed&quot;</span>, std::function&lt;<span class="keywordtype">void</span>()&gt;(std::bind(&amp;<a class="code" href="classCConnman.html#aa7c6970ed98a4a7bafbc071d24897d13">CConnman::ThreadDNSAddressSeed</a>, <span class="keyword">this</span>)));</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160; <span class="comment">// Initiate outbound connections from -addnode</span></div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160; <a class="code" href="classCConnman.html#ab94bcc3fb7745cd4aee32c4b8394bed1">threadOpenAddedConnections</a> = std::thread(&amp;<a class="code" href="util_8h.html#ac481a378af0229bf71e3d9fee7b938ad">TraceThread</a>&lt;std::function&lt;<span class="keywordtype">void</span>()&gt; &gt;, <span class="stringliteral">&quot;addcon&quot;</span>, std::function&lt;<span class="keywordtype">void</span>()&gt;(std::bind(&amp;<a class="code" href="classCConnman.html#a0b787caf95e52a346a2b31a580d60a62">CConnman::ThreadOpenAddedConnections</a>, <span class="keyword">this</span>)));</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160;</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160; <span class="comment">// Initiate outbound connections</span></div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160; <a class="code" href="classCConnman.html#a77e704e5251f7545d2f87d81f08181f2">threadOpenConnections</a> = std::thread(&amp;<a class="code" href="util_8h.html#ac481a378af0229bf71e3d9fee7b938ad">TraceThread</a>&lt;std::function&lt;<span class="keywordtype">void</span>()&gt; &gt;, <span class="stringliteral">&quot;opencon&quot;</span>, std::function&lt;<span class="keywordtype">void</span>()&gt;(std::bind(&amp;<a class="code" href="classCConnman.html#ac4c8cf5142f88565e789f3b173d89b3e">CConnman::ThreadOpenConnections</a>, <span class="keyword">this</span>)));</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160; <span class="comment">// Initiate masternode connections</span></div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160; <a class="code" href="classCConnman.html#aecc69dfb264443440fe352450c3f6165">threadMnbRequestConnections</a> = std::thread(&amp;<a class="code" href="util_8h.html#ac481a378af0229bf71e3d9fee7b938ad">TraceThread</a>&lt;std::function&lt;<span class="keywordtype">void</span>()&gt; &gt;, <span class="stringliteral">&quot;mnbcon&quot;</span>, std::function&lt;<span class="keywordtype">void</span>()&gt;(std::bind(&amp;<a class="code" href="classCConnman.html#a12e5839242677181ea3633636670b062">CConnman::ThreadMnbRequestConnections</a>, <span class="keyword">this</span>)));</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160;</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160; <span class="comment">// Process messages</span></div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160; <a class="code" href="classCConnman.html#a0912548f2db81fc15f291ce42ac50f0e">threadMessageHandler</a> = std::thread(&amp;<a class="code" href="util_8h.html#ac481a378af0229bf71e3d9fee7b938ad">TraceThread</a>&lt;std::function&lt;<span class="keywordtype">void</span>()&gt; &gt;, <span class="stringliteral">&quot;msghand&quot;</span>, std::function&lt;<span class="keywordtype">void</span>()&gt;(std::bind(&amp;<a class="code" href="classCConnman.html#aacdbb7148575a31bb33bc345e2bf22a9">CConnman::ThreadMessageHandler</a>, <span class="keyword">this</span>)));</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160;</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160; <span class="comment">// Dump network addresses</span></div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160; scheduler.<a class="code" href="classCScheduler.html#ad7fcff70877bf1d84f30c1137bba816f">scheduleEvery</a>(boost::bind(&amp;<a class="code" href="classCConnman.html#ad59340080a38661aadeac522c2ccf656">CConnman::DumpData</a>, <span class="keyword">this</span>), <a class="code" href="net_8cpp.html#a272e900bb201601d6842e465bec135af">DUMP_ADDRESSES_INTERVAL</a>);</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160;</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160;}</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160;</div><div class="line"><a name="l02267"></a><span class="lineno"><a class="line" href="classCNetCleanup.html"> 2267</a></span>&#160;<span class="keyword">class </span><a class="code" href="classCNetCleanup.html">CNetCleanup</a></div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;{</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02270"></a><span class="lineno"><a class="line" href="classCNetCleanup.html#a928d536c21f6190defda6d6ea2726347"> 2270</a></span>&#160; <a class="code" href="classCNetCleanup.html#a928d536c21f6190defda6d6ea2726347">CNetCleanup</a>() {}</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;</div><div class="line"><a name="l02272"></a><span class="lineno"><a class="line" href="classCNetCleanup.html#a29b59094c7697b45ca6d13424012506b"> 2272</a></span>&#160; <a class="code" href="classCNetCleanup.html#a29b59094c7697b45ca6d13424012506b">~CNetCleanup</a>()</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160; {</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;<span class="preprocessor">#ifdef WIN32</span></div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160; <span class="comment">// Shutdown Windows Sockets</span></div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160; WSACleanup();</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160; }</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160;}</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;<a class="code" href="net_8cpp.html#ae560d3fdf794873af9a1212644985fdd">instance_of_cnetcleanup</a>;</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160;</div><div class="line"><a name="l02282"></a><span class="lineno"><a class="line" href="classCExplicitNetCleanup.html#a381b3aec88e5c9432d3777525682c8f5"> 2282</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCExplicitNetCleanup.html#a381b3aec88e5c9432d3777525682c8f5">CExplicitNetCleanup::callCleanup</a>()</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160;{</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160; <span class="comment">// Explicit call to destructor of CNetCleanup because it&#39;s not implicitly called</span></div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160; <span class="comment">// when the wallet is restarted from within the wallet itself.</span></div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160; <a class="code" href="classCNetCleanup.html">CNetCleanup</a> *tmp = <span class="keyword">new</span> <a class="code" href="classCNetCleanup.html">CNetCleanup</a>();</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160; <span class="keyword">delete</span> tmp; <span class="comment">// Stroustrup&#39;s gonna kill me for that</span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;}</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;</div><div class="line"><a name="l02290"></a><span class="lineno"><a class="line" href="classCConnman.html#a4d51a2b0b901b8538ed7cf6a8df7a3ef"> 2290</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a4d51a2b0b901b8538ed7cf6a8df7a3ef">CConnman::Interrupt</a>()</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;{</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160; {</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160; std::lock_guard&lt;std::mutex&gt; lock(<a class="code" href="classCConnman.html#a217b6ac63ee4b64199a2d11284d6bee4">mutexMsgProc</a>);</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160; <a class="code" href="classCConnman.html#a2fdedb3739836bdc19590ad84960a3a6">flagInterruptMsgProc</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160; }</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160; <a class="code" href="classCConnman.html#a03645ed0eb723430af180ad2ae36adc3">condMsgProc</a>.notify_all();</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160;</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160; <a class="code" href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">interruptNet</a>();</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160; <a class="code" href="netbase_8cpp.html#a851a9917fb3475698f6632cfee0b4e23">InterruptSocks5</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160;</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">semOutbound</a>)</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;(<a class="code" href="classCConnman.html#ac3d0e0de8d7ab3f3ac5674aea93389d3">nMaxOutbound</a> + <a class="code" href="classCConnman.html#af6353e401ae90d8621e768c4392b4e4f">nMaxFeeler</a>); i++)</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160; <a class="code" href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">semOutbound</a>-&gt;<a class="code" href="classCSemaphore.html#af6a956f6c191e824485fd3af6db39318">post</a>();</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;}</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160;</div><div class="line"><a name="l02306"></a><span class="lineno"><a class="line" href="classCConnman.html#a289dca0ee65310fcfc5b552249fc0401"> 2306</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a289dca0ee65310fcfc5b552249fc0401">CConnman::Stop</a>()</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;{</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a0912548f2db81fc15f291ce42ac50f0e">threadMessageHandler</a>.joinable())</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160; <a class="code" href="classCConnman.html#a0912548f2db81fc15f291ce42ac50f0e">threadMessageHandler</a>.join();</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#aecc69dfb264443440fe352450c3f6165">threadMnbRequestConnections</a>.joinable())</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160; <a class="code" href="classCConnman.html#aecc69dfb264443440fe352450c3f6165">threadMnbRequestConnections</a>.join();</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a77e704e5251f7545d2f87d81f08181f2">threadOpenConnections</a>.joinable())</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160; <a class="code" href="classCConnman.html#a77e704e5251f7545d2f87d81f08181f2">threadOpenConnections</a>.join();</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#ab94bcc3fb7745cd4aee32c4b8394bed1">threadOpenAddedConnections</a>.joinable())</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160; <a class="code" href="classCConnman.html#ab94bcc3fb7745cd4aee32c4b8394bed1">threadOpenAddedConnections</a>.join();</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a4ee3395b9ce47619ba794649ee86014b">threadDNSAddressSeed</a>.joinable())</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160; <a class="code" href="classCConnman.html#a4ee3395b9ce47619ba794649ee86014b">threadDNSAddressSeed</a>.join();</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#af71dbf1403017b3cdb88ee222c2ca9a4">threadSocketHandler</a>.joinable())</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160; <a class="code" href="classCConnman.html#af71dbf1403017b3cdb88ee222c2ca9a4">threadSocketHandler</a>.join();</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#af869675d30f1c016912c7ebc2ec8e409">semMasternodeOutbound</a>)</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;<a class="code" href="net_8h.html#a58a39fe81582f307b3165d13dc7dcf2f">MAX_OUTBOUND_MASTERNODE_CONNECTIONS</a>; i++)</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; <a class="code" href="classCConnman.html#af869675d30f1c016912c7ebc2ec8e409">semMasternodeOutbound</a>-&gt;<a class="code" href="classCSemaphore.html#af6a956f6c191e824485fd3af6db39318">post</a>();</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160;</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#ab07810a88d9b1d7a0309509cf0cadd57">fAddressesInitialized</a>)</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160; {</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160; <a class="code" href="classCConnman.html#ad59340080a38661aadeac522c2ccf656">DumpData</a>();</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160; <a class="code" href="classCConnman.html#ab07810a88d9b1d7a0309509cf0cadd57">fAddressesInitialized</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; }</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160;</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160; <span class="comment">// Close sockets</span></div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>)</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a> != <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>)</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>);</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160; BOOST_FOREACH(<a class="code" href="structCConnman_1_1ListenSocket.html">ListenSocket</a>&amp; hListenSocket, <a class="code" href="classCConnman.html#a6a8dd8e367c6342baf26c697d004906d">vhListenSocket</a>)</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160; <span class="keywordflow">if</span> (hListenSocket.<a class="code" href="structCConnman_1_1ListenSocket.html#a89f7b8ffa14007712f339484ac315fc9">socket</a> != <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>)</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(hListenSocket.<a class="code" href="structCConnman_1_1ListenSocket.html#a89f7b8ffa14007712f339484ac315fc9">socket</a>))</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;CloseSocket(hListenSocket) failed with error %s\n&quot;</span>, <a class="code" href="netbase_8cpp.html#a8ddb7d8d6e5b5cfabfdeea132f556977">NetworkErrorString</a>(<a class="code" href="compat_8h.html#a6d24fe3ab2906c21c373505ca244f90b">WSAGetLastError</a>()));</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160;</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160; <span class="comment">// clean up some globals (to help leak detection)</span></div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a> *pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>) {</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; <a class="code" href="classCConnman.html#a1c476458d499d52f2c87c88d93082a9d">DeleteNode</a>(pnode);</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160; }</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a> *pnode, <a class="code" href="classCConnman.html#a320b487f2f4437c2518cf6d2b37f95fd">vNodesDisconnected</a>) {</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; <a class="code" href="classCConnman.html#a1c476458d499d52f2c87c88d93082a9d">DeleteNode</a>(pnode);</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160; }</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160; <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.clear();</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160; <a class="code" href="classCConnman.html#a320b487f2f4437c2518cf6d2b37f95fd">vNodesDisconnected</a>.clear();</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160; <a class="code" href="classCConnman.html#a6a8dd8e367c6342baf26c697d004906d">vhListenSocket</a>.clear();</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160; <span class="keyword">delete</span> <a class="code" href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">semOutbound</a>;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160; <a class="code" href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">semOutbound</a> = NULL;</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; <span class="keyword">delete</span> <a class="code" href="classCConnman.html#af869675d30f1c016912c7ebc2ec8e409">semMasternodeOutbound</a>;</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; <a class="code" href="classCConnman.html#af869675d30f1c016912c7ebc2ec8e409">semMasternodeOutbound</a> = NULL;</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="net_8cpp.html#a1e6c74cfb67940ce1cf68ac2b2934011">pnodeLocalHost</a>)</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; <a class="code" href="classCConnman.html#a1c476458d499d52f2c87c88d93082a9d">DeleteNode</a>(<a class="code" href="net_8cpp.html#a1e6c74cfb67940ce1cf68ac2b2934011">pnodeLocalHost</a>);</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; <a class="code" href="net_8cpp.html#a1e6c74cfb67940ce1cf68ac2b2934011">pnodeLocalHost</a> = NULL;</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;}</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160;</div><div class="line"><a name="l02359"></a><span class="lineno"><a class="line" href="classCConnman.html#a1c476458d499d52f2c87c88d93082a9d"> 2359</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a1c476458d499d52f2c87c88d93082a9d">CConnman::DeleteNode</a>(<a class="code" href="classCNode.html">CNode</a>* pnode)</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;{</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160; assert(pnode);</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160; <span class="keywordtype">bool</span> fUpdateConnectionTime = <span class="keyword">false</span>;</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160; <a class="code" href="net_8cpp.html#a475f2fc7d8f5cd7511db253cae8fe28a">GetNodeSignals</a>().<a class="code" href="structCNodeSignals.html#afeb0f429de9477d8e7c003d44050bf00">FinalizeNode</a>(pnode-&gt;<a class="code" href="classCNode.html#a157903f7830c0dfbf6a93852066f0b8f">GetId</a>(), fUpdateConnectionTime);</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; <span class="keywordflow">if</span>(fUpdateConnectionTime)</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a7aba66d9e9527522fed974567d34c322">Connected</a>(pnode-&gt;<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a>);</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; <span class="keyword">delete</span> pnode;</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160;}</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;</div><div class="line"><a name="l02369"></a><span class="lineno"><a class="line" href="classCConnman.html#ab4bc83003310d960423d963148d5c9ec"> 2369</a></span>&#160;<a class="code" href="classCConnman.html#ab4bc83003310d960423d963148d5c9ec">CConnman::~CConnman</a>()</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;{</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160; <a class="code" href="classCConnman.html#a4d51a2b0b901b8538ed7cf6a8df7a3ef">Interrupt</a>();</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160; <a class="code" href="classCConnman.html#a289dca0ee65310fcfc5b552249fc0401">Stop</a>();</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;}</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;</div><div class="line"><a name="l02375"></a><span class="lineno"><a class="line" href="classCConnman.html#a47a0fe62e6fb1008c77f3b2150214213"> 2375</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classCConnman.html#a47a0fe62e6fb1008c77f3b2150214213">CConnman::GetAddressCount</a>()<span class="keyword"> const</span></div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a244508e8463c4fdfd8b085fcb3b5a225">size</a>();</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;}</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;</div><div class="line"><a name="l02380"></a><span class="lineno"><a class="line" href="classCConnman.html#a46915b82dd2183baf2944d74d88a4228"> 2380</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a46915b82dd2183baf2944d74d88a4228">CConnman::SetServices</a>(<span class="keyword">const</span> <a class="code" href="classCService.html">CService</a> &amp;addr, <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537">ServiceFlags</a> nServices)</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;{</div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#ab3234587a7d74e0329906005342a7824">SetServices</a>(addr, nServices);</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;}</div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;</div><div class="line"><a name="l02385"></a><span class="lineno"><a class="line" href="classCConnman.html#a85dedb235a648a1b8370228ba62ebacb"> 2385</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a85dedb235a648a1b8370228ba62ebacb">CConnman::MarkAddressGood</a>(<span class="keyword">const</span> <a class="code" href="classCAddress.html">CAddress</a>&amp; addr)</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;{</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a993e80e74701d7bc6bb49880c387b847">Good</a>(addr);</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;}</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;</div><div class="line"><a name="l02390"></a><span class="lineno"><a class="line" href="classCConnman.html#a3b4209a685463cdceeefa0924e4a5f68"> 2390</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a3b4209a685463cdceeefa0924e4a5f68">CConnman::AddNewAddress</a>(<span class="keyword">const</span> <a class="code" href="classCAddress.html">CAddress</a>&amp; addr, <span class="keyword">const</span> <a class="code" href="classCAddress.html">CAddress</a>&amp; addrFrom, int64_t nTimePenalty)</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;{</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a03fcc7109b5f014760dc50a81f68c5ec">Add</a>(addr, addrFrom, nTimePenalty);</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160;}</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;</div><div class="line"><a name="l02395"></a><span class="lineno"><a class="line" href="classCConnman.html#a47d9024273a8c421fa7de641c30e9081"> 2395</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a47d9024273a8c421fa7de641c30e9081">CConnman::AddNewAddresses</a>(<span class="keyword">const</span> std::vector&lt;CAddress&gt;&amp; vAddr, <span class="keyword">const</span> <a class="code" href="classCAddress.html">CAddress</a>&amp; addrFrom, int64_t nTimePenalty)</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;{</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160; <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a03fcc7109b5f014760dc50a81f68c5ec">Add</a>(vAddr, addrFrom, nTimePenalty);</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;}</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160;</div><div class="line"><a name="l02400"></a><span class="lineno"><a class="line" href="classCConnman.html#a4ba34cd3557ab0ba1cfcbe7c18bf1199"> 2400</a></span>&#160;std::vector&lt;CAddress&gt; <a class="code" href="classCConnman.html#a4ba34cd3557ab0ba1cfcbe7c18bf1199">CConnman::GetAddresses</a>()</div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;{</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">addrman</a>.<a class="code" href="classCAddrMan.html#a69cc6138e696cf88de60925d26023bf2">GetAddr</a>();</div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160;}</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;</div><div class="line"><a name="l02405"></a><span class="lineno"><a class="line" href="classCConnman.html#af4cd7fce69f5bf61701c3735ba3bec79"> 2405</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#af4cd7fce69f5bf61701c3735ba3bec79">CConnman::AddNode</a>(<span class="keyword">const</span> std::string&amp; strNode)</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160;{</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#af185d7f8ac4389a0247a47cf16e4610c">cs_vAddedNodes</a>);</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;std::string&gt;::const_iterator it = <a class="code" href="classCConnman.html#adb38e15b9237df805562255d3ee8fa7e">vAddedNodes</a>.begin(); it != <a class="code" href="classCConnman.html#adb38e15b9237df805562255d3ee8fa7e">vAddedNodes</a>.end(); ++it) {</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160; <span class="keywordflow">if</span> (strNode == *it)</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160; }</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160;</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160; <a class="code" href="classCConnman.html#adb38e15b9237df805562255d3ee8fa7e">vAddedNodes</a>.push_back(strNode);</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;}</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160;</div><div class="line"><a name="l02417"></a><span class="lineno"><a class="line" href="classCConnman.html#af9af880a6906571013cf3f21c2761110"> 2417</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#af9af880a6906571013cf3f21c2761110">CConnman::RemoveAddedNode</a>(<span class="keyword">const</span> std::string&amp; strNode)</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160;{</div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#af185d7f8ac4389a0247a47cf16e4610c">cs_vAddedNodes</a>);</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;std::string&gt;::iterator it = <a class="code" href="classCConnman.html#adb38e15b9237df805562255d3ee8fa7e">vAddedNodes</a>.begin(); it != <a class="code" href="classCConnman.html#adb38e15b9237df805562255d3ee8fa7e">vAddedNodes</a>.end(); ++it) {</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160; <span class="keywordflow">if</span> (strNode == *it) {</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160; <a class="code" href="classCConnman.html#adb38e15b9237df805562255d3ee8fa7e">vAddedNodes</a>.erase(it);</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160; }</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160; }</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;}</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;</div><div class="line"><a name="l02429"></a><span class="lineno"><a class="line" href="classCConnman.html#a255a163d4df189aa01faf219c97a2994"> 2429</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classCConnman.html#a255a163d4df189aa01faf219c97a2994">CConnman::GetNodeCount</a>(<a class="code" href="classCConnman.html#a78c7481e9b2575bb1fb37078e28a1c6a">NumConnections</a> <a class="code" href="dash-tx_8cpp.html#ac8bf36fe0577cba66bccda3a6f7e80a4">flags</a>)</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;{</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="dash-tx_8cpp.html#ac8bf36fe0577cba66bccda3a6f7e80a4">flags</a> == <a class="code" href="classCConnman.html#a78c7481e9b2575bb1fb37078e28a1c6aa45b675928145678b43b3927be215c60f">CConnman::CONNECTIONS_ALL</a>) <span class="comment">// Shortcut if we want total</span></div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.size();</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160;</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160; <span class="keywordtype">int</span> nNum = 0;</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;CNode*&gt;::const_iterator it = <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.begin(); it != <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.end(); ++it)</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="dash-tx_8cpp.html#ac8bf36fe0577cba66bccda3a6f7e80a4">flags</a> &amp; ((*it)-&gt;fInbound ? <a class="code" href="classCConnman.html#a78c7481e9b2575bb1fb37078e28a1c6aa03265dbe8e18aa30dd559b9fa18a8acb">CONNECTIONS_IN</a> : <a class="code" href="classCConnman.html#a78c7481e9b2575bb1fb37078e28a1c6aa8ee363e1db3837d38b4ce949d29daa7c">CONNECTIONS_OUT</a>))</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160; nNum++;</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160;</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160; <span class="keywordflow">return</span> nNum;</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;}</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160;</div><div class="line"><a name="l02443"></a><span class="lineno"><a class="line" href="classCConnman.html#ad938d53e18ad8662aa5b8495bf001937"> 2443</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#ad938d53e18ad8662aa5b8495bf001937">CConnman::GetNodeStats</a>(std::vector&lt;CNodeStats&gt;&amp; vstats)</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160;{</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; vstats.clear();</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160; vstats.reserve(<a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.size());</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;CNode*&gt;::iterator it = <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.begin(); it != <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.end(); ++it) {</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160; <a class="code" href="classCNode.html">CNode</a>* pnode = *it;</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160; <a class="code" href="classCNodeStats.html">CNodeStats</a> stats;</div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#aaa77188d9df85b80e3f8a30292acf6a9">copyStats</a>(stats);</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160; vstats.push_back(stats);</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160; }</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160;}</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160;</div><div class="line"><a name="l02456"></a><span class="lineno"><a class="line" href="classCConnman.html#a61837aadc0749654a483532d145c277b"> 2456</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#a61837aadc0749654a483532d145c277b">CConnman::DisconnectNode</a>(<span class="keyword">const</span> std::string&amp; strNode)</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160;{</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCNode.html">CNode</a>* pnode = <a class="code" href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">FindNode</a>(strNode)) {</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; pnode-&gt;fDisconnect = <span class="keyword">true</span>;</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; }</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;}</div><div class="line"><a name="l02465"></a><span class="lineno"><a class="line" href="classCConnman.html#a5c9ecf4263c3d490fc709b23f93e2e07"> 2465</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#a61837aadc0749654a483532d145c277b">CConnman::DisconnectNode</a>(<a class="code" href="net_8h.html#a954d746a58632565552615fd0a4ee660">NodeId</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160;{</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classCNode.html">CNode</a>* pnode : <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>) {</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == pnode-&gt;id) {</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160; pnode-&gt;fDisconnect = <span class="keyword">true</span>;</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160; }</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160; }</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;}</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;</div><div class="line"><a name="l02477"></a><span class="lineno"><a class="line" href="classCConnman.html#a5fdad96946aa2bc67961ad973bf65fa5"> 2477</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a5fdad96946aa2bc67961ad973bf65fa5">CConnman::RelayTransaction</a>(<span class="keyword">const</span> <a class="code" href="classCTransaction.html">CTransaction</a>&amp; tx)</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;{</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160; <a class="code" href="classCDataStream.html">CDataStream</a> ss(<a class="code" href="serialize_8h.html#ae4d5251432e1a9e6803c0240cc492e18a652754eeaf79fba4fcf4c18597a6961c">SER_NETWORK</a>, <a class="code" href="version_8h.html#a4e2497f7c9c4319adcaf945159ec63f4">PROTOCOL_VERSION</a>);</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160; ss.<a class="code" href="classCDataStream.html#a5542e71bd7af2ab7cd7be0f381d39cb5">reserve</a>(10000);</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160; <a class="code" href="classuint256.html">uint256</a> hash = tx.<a class="code" href="classCTransaction.html#a7efd1379de830341417c0bfa23a149aa">GetHash</a>();</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; <a class="code" href="classCTxLockRequest.html">CTxLockRequest</a> txLockRequest;</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160; <a class="code" href="classCDarksendBroadcastTx.html">CDarksendBroadcastTx</a> dstx = <a class="code" href="classCPrivateSend.html#a36f23c902c9f5510a45ba39562bcd674">CPrivateSend::GetDSTX</a>(hash);</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160; <span class="keywordflow">if</span>(dstx) { <span class="comment">// MSG_DSTX</span></div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160; ss &lt;&lt; dstx;</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="instantx_8cpp.html#a6ed4b104bfd9f775e0c0a3524a6b4955">instantsend</a>.<a class="code" href="classCInstantSend.html#a12b011c3b48d3a3d9a0e71a9e5ed164d">GetTxLockRequest</a>(hash, txLockRequest)) { <span class="comment">// MSG_TXLOCK_REQUEST</span></div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160; ss &lt;&lt; txLockRequest;</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160; } <span class="keywordflow">else</span> { <span class="comment">// MSG_TX</span></div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160; ss &lt;&lt; tx;</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160; }</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160; <a class="code" href="classCConnman.html#a5fdad96946aa2bc67961ad973bf65fa5">RelayTransaction</a>(tx, ss);</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;}</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;</div><div class="line"><a name="l02494"></a><span class="lineno"><a class="line" href="classCConnman.html#a31c16f2d114174caf9755a7b8ec06691"> 2494</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a5fdad96946aa2bc67961ad973bf65fa5">CConnman::RelayTransaction</a>(<span class="keyword">const</span> <a class="code" href="classCTransaction.html">CTransaction</a>&amp; tx, <span class="keyword">const</span> <a class="code" href="classCDataStream.html">CDataStream</a>&amp; ss)</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160;{</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160; <a class="code" href="classuint256.html">uint256</a> hash = tx.<a class="code" href="classCTransaction.html#a7efd1379de830341417c0bfa23a149aa">GetHash</a>();</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160; <span class="keywordtype">int</span> nInv = <span class="keyword">static_cast&lt;</span><span class="keywordtype">bool</span><span class="keyword">&gt;</span>(<a class="code" href="classCPrivateSend.html#a36f23c902c9f5510a45ba39562bcd674">CPrivateSend::GetDSTX</a>(hash)) ? <a class="code" href="protocol_8h.html#a16af7b253440dadd46a80a4b9fddba4dab7e23cc7eff00496b50b04e9e98f1b85">MSG_DSTX</a> :</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160; (<a class="code" href="instantx_8cpp.html#a6ed4b104bfd9f775e0c0a3524a6b4955">instantsend</a>.<a class="code" href="classCInstantSend.html#ae918618de5c9cc14d15188d067274186">HasTxLockRequest</a>(hash) ? <a class="code" href="protocol_8h.html#a16af7b253440dadd46a80a4b9fddba4da802e4d970385efb01469f48db2cf1e06">MSG_TXLOCK_REQUEST</a> : <a class="code" href="protocol_8h.html#a16af7b253440dadd46a80a4b9fddba4da0494732fc92c975f58783e224585c473">MSG_TX</a>);</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160; <a class="code" href="classCInv.html">CInv</a> inv(nInv, hash);</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160; {</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="net_8cpp.html#ae1ed86ae54e13fe5f0ae1c12e48e3a0e">cs_mapRelay</a>);</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160; <span class="comment">// Expire old relay messages</span></div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="net_8cpp.html#a57df927b0cbc3f797a858aa2625aeb20">vRelayExpiration</a>.empty() &amp;&amp; <a class="code" href="net_8cpp.html#a57df927b0cbc3f797a858aa2625aeb20">vRelayExpiration</a>.front().first &lt; <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>())</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160; {</div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160; <a class="code" href="net_8cpp.html#adb45ec1b7c89fd811f480182f45ec546">mapRelay</a>.erase(<a class="code" href="net_8cpp.html#a57df927b0cbc3f797a858aa2625aeb20">vRelayExpiration</a>.front().second);</div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160; <a class="code" href="net_8cpp.html#a57df927b0cbc3f797a858aa2625aeb20">vRelayExpiration</a>.pop_front();</div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160; }</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;</div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160; <span class="comment">// Save original serialized message so newer versions are preserved</span></div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160; <a class="code" href="net_8cpp.html#adb45ec1b7c89fd811f480182f45ec546">mapRelay</a>.insert(std::make_pair(inv, ss));</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160; <a class="code" href="net_8cpp.html#a57df927b0cbc3f797a858aa2625aeb20">vRelayExpiration</a>.push_back(std::make_pair(<a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>() + 15 * 60, inv));</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160; }</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>)</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160; {</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160; <span class="keywordflow">if</span>(!pnode-&gt;<a class="code" href="classCNode.html#ab387bb0c4ffd42e3f0aea233dca0e301">fRelayTxes</a>)</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(pnode-&gt;<a class="code" href="classCNode.html#a66aeed3b6534635d031dff3eee9538de">cs_filter</a>);</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a2e28bf088e56fc9d30e99e9de6587743">pfilter</a>)</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160; {</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a2e28bf088e56fc9d30e99e9de6587743">pfilter</a>-&gt;<a class="code" href="classCBloomFilter.html#aec420a9b66ab133090c2b4b8ed286f79">IsRelevantAndUpdate</a>(tx))</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a7cef2333aa8776127a7e7fcab659eb6a">PushInventory</a>(inv);</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a7cef2333aa8776127a7e7fcab659eb6a">PushInventory</a>(inv);</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160; }</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;}</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;</div><div class="line"><a name="l02528"></a><span class="lineno"><a class="line" href="classCConnman.html#a3d45932513c62fe9c489b2aa6ec86316"> 2528</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a3d45932513c62fe9c489b2aa6ec86316">CConnman::RelayInv</a>(<a class="code" href="classCInv.html">CInv</a> &amp;inv, <span class="keyword">const</span> <span class="keywordtype">int</span> minProtoVersion) {</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160; BOOST_FOREACH(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>)</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160; <span class="keywordflow">if</span>(pnode-&gt;<a class="code" href="classCNode.html#a0a2cdd01cb730536adf1780c3df66430">nVersion</a> &gt;= minProtoVersion)</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a7cef2333aa8776127a7e7fcab659eb6a">PushInventory</a>(inv);</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;}</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160;</div><div class="line"><a name="l02535"></a><span class="lineno"><a class="line" href="classCConnman.html#ad38cc6cdc3b3767c2714452224895093"> 2535</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#ad38cc6cdc3b3767c2714452224895093">CConnman::RecordBytesRecv</a>(uint64_t bytes)</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;{</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a376121b9eccd7ebbe19d3c3c058146d4">cs_totalBytesRecv</a>);</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160; <a class="code" href="classCConnman.html#a78fc6a51fab2550bf73787cf1eea2a3c">nTotalBytesRecv</a> += bytes;</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160;}</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;</div><div class="line"><a name="l02541"></a><span class="lineno"><a class="line" href="classCConnman.html#a494218531e4289a5c0b9c373890454c4"> 2541</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a494218531e4289a5c0b9c373890454c4">CConnman::RecordBytesSent</a>(uint64_t bytes)</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160;{</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a50689d29e242bd9070f17bc62d32e90f">cs_totalBytesSent</a>);</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160; <a class="code" href="classCConnman.html#a492f8afd8cbd66b16401727d2f521e43">nTotalBytesSent</a> += bytes;</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160;</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160; uint64_t now = <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>();</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a8c360ad2471ad7287b27f944aa382441">nMaxOutboundCycleStartTime</a> + <a class="code" href="classCConnman.html#a626cf5fd895a959c73f7b77acc1a18a8">nMaxOutboundTimeframe</a> &lt; now)</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160; {</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160; <span class="comment">// timeframe expired, reset cycle</span></div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160; <a class="code" href="classCConnman.html#a8c360ad2471ad7287b27f944aa382441">nMaxOutboundCycleStartTime</a> = now;</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160; <a class="code" href="classCConnman.html#a8c2ade2114997b11a70c881456439529">nMaxOutboundTotalBytesSentInCycle</a> = 0;</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160; }</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160; <span class="comment">// TODO, exclude whitebind peers</span></div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160; <a class="code" href="classCConnman.html#a8c2ade2114997b11a70c881456439529">nMaxOutboundTotalBytesSentInCycle</a> += bytes;</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;}</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;</div><div class="line"><a name="l02558"></a><span class="lineno"><a class="line" href="classCConnman.html#a9971c08442c2c5b23ec6598f9ef427db"> 2558</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a9971c08442c2c5b23ec6598f9ef427db">CConnman::SetMaxOutboundTarget</a>(uint64_t limit)</div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;{</div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a50689d29e242bd9070f17bc62d32e90f">cs_totalBytesSent</a>);</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160; uint64_t recommendedMinimum = (<a class="code" href="classCConnman.html#a626cf5fd895a959c73f7b77acc1a18a8">nMaxOutboundTimeframe</a> / 600) * <a class="code" href="consensus_8h.html#aa372df0d6494f4aaca5ecf5a5a9d4406">MaxBlockSize</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160; <a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a> = limit;</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160; <span class="keywordflow">if</span> (limit &gt; 0 &amp;&amp; limit &lt; recommendedMinimum)</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;Max outbound target is very small (%s bytes) and will be overshot. Recommended minimum is %s bytes.\n&quot;</span>, <a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a>, recommendedMinimum);</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160;}</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;</div><div class="line"><a name="l02568"></a><span class="lineno"><a class="line" href="classCConnman.html#a9ad0bc18f18af0b9ed33a6e803aa3793"> 2568</a></span>&#160;uint64_t <a class="code" href="classCConnman.html#a9ad0bc18f18af0b9ed33a6e803aa3793">CConnman::GetMaxOutboundTarget</a>()</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;{</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a50689d29e242bd9070f17bc62d32e90f">cs_totalBytesSent</a>);</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a>;</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160;}</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;</div><div class="line"><a name="l02574"></a><span class="lineno"><a class="line" href="classCConnman.html#a45a52ec9d3493ca313e9b8cc928c83c7"> 2574</a></span>&#160;uint64_t <a class="code" href="classCConnman.html#a45a52ec9d3493ca313e9b8cc928c83c7">CConnman::GetMaxOutboundTimeframe</a>()</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160;{</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a50689d29e242bd9070f17bc62d32e90f">cs_totalBytesSent</a>);</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a626cf5fd895a959c73f7b77acc1a18a8">nMaxOutboundTimeframe</a>;</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160;}</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;</div><div class="line"><a name="l02580"></a><span class="lineno"><a class="line" href="classCConnman.html#ab1cf2be67b3e98527c87e6d5261d267e"> 2580</a></span>&#160;uint64_t <a class="code" href="classCConnman.html#ab1cf2be67b3e98527c87e6d5261d267e">CConnman::GetMaxOutboundTimeLeftInCycle</a>()</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;{</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a50689d29e242bd9070f17bc62d32e90f">cs_totalBytesSent</a>);</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a> == 0)</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160;</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a8c360ad2471ad7287b27f944aa382441">nMaxOutboundCycleStartTime</a> == 0)</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a626cf5fd895a959c73f7b77acc1a18a8">nMaxOutboundTimeframe</a>;</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160; uint64_t cycleEndTime = <a class="code" href="classCConnman.html#a8c360ad2471ad7287b27f944aa382441">nMaxOutboundCycleStartTime</a> + <a class="code" href="classCConnman.html#a626cf5fd895a959c73f7b77acc1a18a8">nMaxOutboundTimeframe</a>;</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; uint64_t now = <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>();</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160; <span class="keywordflow">return</span> (cycleEndTime &lt; now) ? 0 : cycleEndTime - <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>();</div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;}</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;</div><div class="line"><a name="l02594"></a><span class="lineno"><a class="line" href="classCConnman.html#a4628ea4ab0119c4a396cdae10bc7d06e"> 2594</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a4628ea4ab0119c4a396cdae10bc7d06e">CConnman::SetMaxOutboundTimeframe</a>(uint64_t timeframe)</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;{</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a50689d29e242bd9070f17bc62d32e90f">cs_totalBytesSent</a>);</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a626cf5fd895a959c73f7b77acc1a18a8">nMaxOutboundTimeframe</a> != timeframe)</div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160; {</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160; <span class="comment">// reset measure-cycle in case of changing</span></div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160; <span class="comment">// the timeframe</span></div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160; <a class="code" href="classCConnman.html#a8c360ad2471ad7287b27f944aa382441">nMaxOutboundCycleStartTime</a> = <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>();</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160; }</div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160; <a class="code" href="classCConnman.html#a626cf5fd895a959c73f7b77acc1a18a8">nMaxOutboundTimeframe</a> = timeframe;</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;}</div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160;</div><div class="line"><a name="l02606"></a><span class="lineno"><a class="line" href="classCConnman.html#aa12d154df14eef07418a36362d1cb8d7"> 2606</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#aa12d154df14eef07418a36362d1cb8d7">CConnman::OutboundTargetReached</a>(<span class="keywordtype">bool</span> historicalBlockServingLimit)</div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160;{</div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a50689d29e242bd9070f17bc62d32e90f">cs_totalBytesSent</a>);</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a> == 0)</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160; <span class="keywordflow">if</span> (historicalBlockServingLimit)</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160; {</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160; <span class="comment">// keep a large enough buffer to at least relay each block once</span></div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160; uint64_t timeLeftInCycle = <a class="code" href="classCConnman.html#ab1cf2be67b3e98527c87e6d5261d267e">GetMaxOutboundTimeLeftInCycle</a>();</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160; uint64_t buffer = timeLeftInCycle / 600 * <a class="code" href="consensus_8h.html#aa372df0d6494f4aaca5ecf5a5a9d4406">MaxBlockSize</a>(<a class="code" href="validation_8cpp.html#acc6a734ed0e106c8fcfd4f0ab6501d0a">fDIP0001ActiveAtTip</a>);</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160; <span class="keywordflow">if</span> (buffer &gt;= <a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a> || <a class="code" href="classCConnman.html#a8c2ade2114997b11a70c881456439529">nMaxOutboundTotalBytesSentInCycle</a> &gt;= <a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a> - buffer)</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160; }</div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a8c2ade2114997b11a70c881456439529">nMaxOutboundTotalBytesSentInCycle</a> &gt;= <a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a>)</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160;</div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160;}</div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160;</div><div class="line"><a name="l02626"></a><span class="lineno"><a class="line" href="classCConnman.html#a4773d15bc6d7d78d15b38a5bc72c992f"> 2626</a></span>&#160;uint64_t <a class="code" href="classCConnman.html#a4773d15bc6d7d78d15b38a5bc72c992f">CConnman::GetOutboundTargetBytesLeft</a>()</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;{</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a50689d29e242bd9070f17bc62d32e90f">cs_totalBytesSent</a>);</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a> == 0)</div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160;</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classCConnman.html#a8c2ade2114997b11a70c881456439529">nMaxOutboundTotalBytesSentInCycle</a> &gt;= <a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a>) ? 0 : <a class="code" href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">nMaxOutboundLimit</a> - <a class="code" href="classCConnman.html#a8c2ade2114997b11a70c881456439529">nMaxOutboundTotalBytesSentInCycle</a>;</div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160;}</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160;</div><div class="line"><a name="l02635"></a><span class="lineno"><a class="line" href="classCConnman.html#a337ff89eb6c74c70a2d4cd15ed3bc97d"> 2635</a></span>&#160;uint64_t <a class="code" href="classCConnman.html#a337ff89eb6c74c70a2d4cd15ed3bc97d">CConnman::GetTotalBytesRecv</a>()</div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;{</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a376121b9eccd7ebbe19d3c3c058146d4">cs_totalBytesRecv</a>);</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a78fc6a51fab2550bf73787cf1eea2a3c">nTotalBytesRecv</a>;</div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;}</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;</div><div class="line"><a name="l02641"></a><span class="lineno"><a class="line" href="classCConnman.html#ab07ed95cf52f589101bda8fc881d2da1"> 2641</a></span>&#160;uint64_t <a class="code" href="classCConnman.html#ab07ed95cf52f589101bda8fc881d2da1">CConnman::GetTotalBytesSent</a>()</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;{</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a50689d29e242bd9070f17bc62d32e90f">cs_totalBytesSent</a>);</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a492f8afd8cbd66b16401727d2f521e43">nTotalBytesSent</a>;</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160;}</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;</div><div class="line"><a name="l02647"></a><span class="lineno"><a class="line" href="classCConnman.html#a609c5f40a52ca8d5036f65ebdb70469f"> 2647</a></span>&#160;<a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537">ServiceFlags</a> <a class="code" href="classCConnman.html#a609c5f40a52ca8d5036f65ebdb70469f">CConnman::GetLocalServices</a>()<span class="keyword"> const</span></div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a246c1e7e5f8bb3e148a03177fd410517">nLocalServices</a>;</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;}</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160;</div><div class="line"><a name="l02652"></a><span class="lineno"><a class="line" href="classCConnman.html#a36cf799d267785276497583398dfd4cd"> 2652</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a36cf799d267785276497583398dfd4cd">CConnman::SetBestHeight</a>(<span class="keywordtype">int</span> height)</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160;{</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160; <a class="code" href="classCConnman.html#ac88ba00355f9d1870e216075a8f2c85c">nBestHeight</a>.store(height, std::memory_order_release);</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160;}</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160;</div><div class="line"><a name="l02657"></a><span class="lineno"><a class="line" href="classCConnman.html#a0f7d06bcc905778cbfab8ac33d8efe85"> 2657</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classCConnman.html#a0f7d06bcc905778cbfab8ac33d8efe85">CConnman::GetBestHeight</a>()<span class="keyword"> const</span></div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#ac88ba00355f9d1870e216075a8f2c85c">nBestHeight</a>.load(std::memory_order_acquire);</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160;}</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;</div><div class="line"><a name="l02662"></a><span class="lineno"><a class="line" href="classCConnman.html#a30095fabc2e1727514ad2f2d530a496d"> 2662</a></span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classCConnman.html#a30095fabc2e1727514ad2f2d530a496d">CConnman::GetReceiveFloodSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#a8855eb8f432a1fe07b2cc373cc9a3a50">nReceiveFloodSize</a>; }</div><div class="line"><a name="l02663"></a><span class="lineno"><a class="line" href="classCConnman.html#a82a08ed68d1c70aab8d31e6af59523cd"> 2663</a></span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classCConnman.html#a82a08ed68d1c70aab8d31e6af59523cd">CConnman::GetSendBufferSize</a>()<span class="keyword"> const</span>{ <span class="keywordflow">return</span> <a class="code" href="classCConnman.html#ade433492622155412824555e850e3ed9">nSendBufferMaxSize</a>; }</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160;</div><div class="line"><a name="l02665"></a><span class="lineno"><a class="line" href="classCNode.html#a360e2ae57a526e1d9f91ced1c33e2215"> 2665</a></span>&#160;<a class="code" href="classCNode.html#a360e2ae57a526e1d9f91ced1c33e2215">CNode::CNode</a>(<a class="code" href="net_8h.html#a954d746a58632565552615fd0a4ee660">NodeId</a> idIn, <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537">ServiceFlags</a> nLocalServicesIn, <span class="keywordtype">int</span> nMyStartingHeightIn, <a class="code" href="compat_8h.html#a26ef1173e2f2c0d3db27eca28397d723">SOCKET</a> hSocketIn, <span class="keyword">const</span> <a class="code" href="classCAddress.html">CAddress</a>&amp; addrIn, <span class="keyword">const</span> std::string&amp; addrNameIn, <span class="keywordtype">bool</span> fInboundIn, <span class="keywordtype">bool</span> fNetworkNodeIn) :</div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160; addrKnown(5000, 0.001),</div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160; filterInventoryKnown(50000, 0.000001),</div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160; nSendVersion(0)</div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160;{</div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160; <a class="code" href="classCNode.html#a1a2342bb4914d738c14c04affbcdac27">nServices</a> = <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537a51f819cd0b9ac374d6950a29b4861398">NODE_NONE</a>;</div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160; <a class="code" href="classCNode.html#a395e2ead02225f29423e211aa2108272">nServicesExpected</a> = <a class="code" href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537a51f819cd0b9ac374d6950a29b4861398">NODE_NONE</a>;</div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160; <a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a> = hSocketIn;</div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160; <a class="code" href="classCNode.html#af4629eba953ff1d5a3c05437c1b6630a">nRecvVersion</a> = <a class="code" href="version_8h.html#a2c4c900f5bd0c956cc1a64cd0cc1c318">INIT_PROTO_VERSION</a>;</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160; <a class="code" href="classCNode.html#af39253ad525733ca64ab3fc785dfc4eb">nLastSend</a> = 0;</div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160; <a class="code" href="classCNode.html#afb40f43a51ba686de93256727351af07">nLastRecv</a> = 0;</div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160; <a class="code" href="classCNode.html#a33e24a9544df3c60f9e1ec05b5e91051">nSendBytes</a> = 0;</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160; <a class="code" href="classCNode.html#a8bbe2a7052476d62acf7f0a5a9c5981b">nRecvBytes</a> = 0;</div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160; <a class="code" href="classCNode.html#abb39393ef08cb5668ded6cb14cdbc147">nTimeConnected</a> = <a class="code" href="utiltime_8cpp.html#a1c4021a78be4eeffa05732694ab4bab0">GetSystemTimeInSeconds</a>();</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160; <a class="code" href="classCNode.html#a3079fadef397abbf7e8d444f4426ebe7">nTimeOffset</a> = 0;</div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160; <a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a> = addrIn;</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160; <a class="code" href="classCNode.html#a3155cd313d85ec3ff691f8259a5f5345">addrName</a> = addrNameIn == <span class="stringliteral">&quot;&quot;</span> ? <a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a>.<a class="code" href="classCService.html#a75b6c84b3184ab809b6dda3576be78ee">ToStringIPPort</a>() : addrNameIn;</div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160; <a class="code" href="classCNode.html#a0a2cdd01cb730536adf1780c3df66430">nVersion</a> = 0;</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160; <a class="code" href="classCNode.html#a97a9784cba9ad06fd9444d940f5c011c">nNumWarningsSkipped</a> = 0;</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160; <a class="code" href="classCNode.html#a5ab6745f890f7d018b8ab278a4aaf039">nLastWarningTime</a> = 0;</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160; <a class="code" href="classCNode.html#afb24fb33019af5c4085412fe3898cf01">strSubVer</a> = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160; <a class="code" href="classCNode.html#ad3096c14b54aa39a02edb63a4a734c3e">fWhitelisted</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160; <a class="code" href="classCNode.html#a2bb91c9968a9f855c05b1121100a8797">fOneShot</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160; <a class="code" href="classCNode.html#a721e2470c2c961b7599768a14be68781">fClient</a> = <span class="keyword">false</span>; <span class="comment">// set by version message</span></div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160; <a class="code" href="classCNode.html#a25c9b62c42159cc94c6e8ede9ad0ed9d">fFeeler</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160; <a class="code" href="classCNode.html#a64b2550ec558b6106ebc122d450ad35b">fInbound</a> = fInboundIn;</div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160; <a class="code" href="classCNode.html#a933adb2b192939545a01d602b1d7b53a">fNetworkNode</a> = fNetworkNodeIn;</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160; <a class="code" href="classCNode.html#a359647a8e7ad1fc72243b126b35729b6">fSuccessfullyConnected</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160; <a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160; <a class="code" href="classCNode.html#a01f8cac776bef676651f9b8f3f80ae98">nRefCount</a> = 0;</div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160; <a class="code" href="classCNode.html#a3c99b7e2b0e53feb58f6859453456f74">nSendSize</a> = 0;</div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160; <a class="code" href="classCNode.html#a090bda86de6b84c3db83e1f029d4f453">nSendOffset</a> = 0;</div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160; <a class="code" href="classCNode.html#a1a1c0d94de0197c5c4abf5a8d13364f3">hashContinue</a> = <a class="code" href="classuint256.html">uint256</a>();</div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160; <a class="code" href="classCNode.html#a597b41bd64e2ac9391b7211e65aeb52a">nStartingHeight</a> = -1;</div><div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160; <a class="code" href="classCNode.html#a09fbd8c77f6be2b8d4b309c703ce2e13">filterInventoryKnown</a>.<a class="code" href="classCRollingBloomFilter.html#a7615966dc0beaa381892d8f43aeb53a3">reset</a>();</div><div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160; <a class="code" href="classCNode.html#a3da9c559959e182aff8439cd004ff624">fGetAddr</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160; <a class="code" href="classCNode.html#af627cc9fe0654487aed7b4224d78ad24">nNextLocalAddrSend</a> = 0;</div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160; <a class="code" href="classCNode.html#aff4b68eeeee9bf1e27e14f2436a07556">nNextAddrSend</a> = 0;</div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160; <a class="code" href="classCNode.html#a89226be680d821f4eef8fa391f4b4b6a">nNextInvSend</a> = 0;</div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160; <a class="code" href="classCNode.html#ab387bb0c4ffd42e3f0aea233dca0e301">fRelayTxes</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160; <a class="code" href="classCNode.html#a2e28bf088e56fc9d30e99e9de6587743">pfilter</a> = <span class="keyword">new</span> <a class="code" href="classCBloomFilter.html">CBloomFilter</a>();</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160; <a class="code" href="classCNode.html#ad253434141efcbca34150864069aee7e">nLastBlockTime</a> = 0;</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160; <a class="code" href="classCNode.html#a973d29d89889cba8fe7909b1b8959592">nLastTXTime</a> = 0;</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160; <a class="code" href="classCNode.html#a9a077fbd09ddee1d81f027bc01a4ec68">nPingNonceSent</a> = 0;</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160; <a class="code" href="classCNode.html#a8352aa332af726ff117fb890c4dd3869">nPingUsecStart</a> = 0;</div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160; <a class="code" href="classCNode.html#ada34ffe1700a5dafb57de7c4d2491844">nPingUsecTime</a> = 0;</div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160; <a class="code" href="classCNode.html#aa1e9c1dc1d5cf806b9be0af155c0bf90">fPingQueued</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160; <a class="code" href="classCNode.html#a119824dcaebcd3c8e272a68f19a60c43">fMasternode</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160; <a class="code" href="classCNode.html#a4d077afd5c600b9e3241abce4df60722">nMinPingUsecTime</a> = std::numeric_limits&lt;int64_t&gt;::max();</div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160; <a class="code" href="classCNode.html#a656cd9e578e6e1ee07c8b7064302f789">vchKeyedNetGroup</a> = <a class="code" href="classCNode.html#a18a0e04d831c69c144d021a7f7ecb14e">CalculateKeyedNetGroup</a>(<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a>);</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160; <span class="keywordtype">id</span> = idIn;</div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160; <a class="code" href="classCNode.html#ad2f37c291ebec7546d82b23216793f95">nLocalServices</a> = nLocalServicesIn;</div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160; <a class="code" href="classCNode.html#a108e17226d76c85c89f7d057dad2b088">fPauseRecv</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160; <a class="code" href="classCNode.html#a73b323f9e310e3054d909934b37ae671">fPauseSend</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160; <a class="code" href="classCNode.html#a30f76a69e956d342bdbb400541c98ccb">nProcessQueueSize</a> = 0;</div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160;</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160; <a class="code" href="random_8cpp.html#ada0c29949c4d1ac0cc027d93c4771423">GetRandBytes</a>((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&amp;<a class="code" href="classCNode.html#af452f44f41e2e583e01a9b730e475c81">nLocalHostNonce</a>, <span class="keyword">sizeof</span>(<a class="code" href="classCNode.html#af452f44f41e2e583e01a9b730e475c81">nLocalHostNonce</a>));</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160; <a class="code" href="classCNode.html#a77f6fbd0e06434948ffeb27c6d99cdaa">nMyStartingHeight</a> = nMyStartingHeightIn;</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160;</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> std::string &amp;<a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>, <a class="code" href="protocol_8cpp.html#a5f8d18ec9217ffee378339dc22ebe20d">getAllNetMessageTypes</a>())</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160; <a class="code" href="classCNode.html#a2fb06d8be1f078b8796dc5098f114d38">mapRecvBytesPerMsgCmd</a>[<a class="code" href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">msg</a>] = 0;</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160; <a class="code" href="classCNode.html#a2fb06d8be1f078b8796dc5098f114d38">mapRecvBytesPerMsgCmd</a>[<a class="code" href="net_8cpp.html#a6dfc4be12d34c83608661113ac3693fc">NET_MESSAGE_COMMAND_OTHER</a>] = 0;</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160;</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classCNode.html#a933adb2b192939545a01d602b1d7b53a">fNetworkNode</a> || <a class="code" href="classCNode.html#a64b2550ec558b6106ebc122d450ad35b">fInbound</a>)</div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160; <a class="code" href="classCNode.html#afb65ed679f7bda59aab89e0f5afae292">AddRef</a>();</div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160;</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="util_8cpp.html#a8e02420c2f7c53579ccb90acf301ae75">fLogIPs</a>)</div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;Added connection to %s peer=%d\n&quot;</span>, <a class="code" href="classCNode.html#a3155cd313d85ec3ff691f8259a5f5345">addrName</a>, <span class="keywordtype">id</span>);</div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;Added connection peer=%d\n&quot;</span>, <span class="keywordtype">id</span>);</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160;}</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160;</div><div class="line"><a name="l02737"></a><span class="lineno"><a class="line" href="classCNode.html#ac9b30cb93e91a48dacc58821abfc44f0"> 2737</a></span>&#160;<a class="code" href="classCNode.html#ac9b30cb93e91a48dacc58821abfc44f0">CNode::~CNode</a>()</div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160;{</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160; <a class="code" href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a>(<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a>);</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCNode.html#a2e28bf088e56fc9d30e99e9de6587743">pfilter</a>)</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160; <span class="keyword">delete</span> <a class="code" href="classCNode.html#a2e28bf088e56fc9d30e99e9de6587743">pfilter</a>;</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160;}</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160;</div><div class="line"><a name="l02745"></a><span class="lineno"><a class="line" href="classCNode.html#ae0def1498409407d1612833a7d38c875"> 2745</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCNode.html#ae0def1498409407d1612833a7d38c875">CNode::AskFor</a>(<span class="keyword">const</span> <a class="code" href="classCInv.html">CInv</a>&amp; inv)</div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160;{</div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classCNode.html#a7593dfbd76c34a81169e3fb2aa0e0cf7">mapAskFor</a>.size() &gt; <a class="code" href="net_8h.html#aa994a3fa6352ccb31e5bfc425364daf1">MAPASKFOR_MAX_SZ</a> || <a class="code" href="classCNode.html#a9c8fd0d0ef6e26896c53380e6d6bf331">setAskFor</a>.size() &gt; <a class="code" href="net_8h.html#a04723cf5ca6f222bf5cd3c7b2aeb6be5">SETASKFOR_MAX_SZ</a>) {</div><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160; int64_t nNow = <a class="code" href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a>();</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160; <span class="keywordflow">if</span>(nNow - <a class="code" href="classCNode.html#a5ab6745f890f7d018b8ab278a4aaf039">nLastWarningTime</a> &gt; <a class="code" href="net_8h.html#a48948c1d61d3fb24fbbb010eee32e4c4">WARNING_INTERVAL</a>) {</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160; <a class="code" href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a>(<span class="stringliteral">&quot;CNode::AskFor -- WARNING: inventory message dropped: mapAskFor.size = %d, setAskFor.size = %d, MAPASKFOR_MAX_SZ = %d, SETASKFOR_MAX_SZ = %d, nSkipped = %d, peer=%d\n&quot;</span>,</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160; <a class="code" href="classCNode.html#a7593dfbd76c34a81169e3fb2aa0e0cf7">mapAskFor</a>.size(), <a class="code" href="classCNode.html#a9c8fd0d0ef6e26896c53380e6d6bf331">setAskFor</a>.size(), <a class="code" href="net_8h.html#aa994a3fa6352ccb31e5bfc425364daf1">MAPASKFOR_MAX_SZ</a>, <a class="code" href="net_8h.html#a04723cf5ca6f222bf5cd3c7b2aeb6be5">SETASKFOR_MAX_SZ</a>, <a class="code" href="classCNode.html#a97a9784cba9ad06fd9444d940f5c011c">nNumWarningsSkipped</a>, <a class="code" href="classCNode.html#af99591c635f495fc1e6c14745a2a4203">id</a>);</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160; <a class="code" href="classCNode.html#a5ab6745f890f7d018b8ab278a4aaf039">nLastWarningTime</a> = nNow;</div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160; <a class="code" href="classCNode.html#a97a9784cba9ad06fd9444d940f5c011c">nNumWarningsSkipped</a> = 0;</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160; }</div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160; ++<a class="code" href="classCNode.html#a97a9784cba9ad06fd9444d940f5c011c">nNumWarningsSkipped</a>;</div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160; }</div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160; }</div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160; <span class="comment">// a peer may not have multiple non-responded queue positions for a single inv item</span></div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classCNode.html#a9c8fd0d0ef6e26896c53380e6d6bf331">setAskFor</a>.insert(inv.<a class="code" href="classCInv.html#abfa04c38e9c0def9a2b09a9c43929744">hash</a>).second)</div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160;</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160; <span class="comment">// We&#39;re using mapAskFor as a priority queue,</span></div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160; <span class="comment">// the key is the earliest time the request can be sent</span></div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160; int64_t nRequestTime;</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160; <a class="code" href="classlimitedmap.html#ab0a3e4f2ec7c82359300c83a35ae2500">limitedmap&lt;uint256, int64_t&gt;::const_iterator</a> it = <a class="code" href="net_8cpp.html#a0df0c10706c3d7255fd1d57a899ad9f2">mapAlreadyAskedFor</a>.find(inv.<a class="code" href="classCInv.html#abfa04c38e9c0def9a2b09a9c43929744">hash</a>);</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="net_8cpp.html#a0df0c10706c3d7255fd1d57a899ad9f2">mapAlreadyAskedFor</a>.end())</div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160; nRequestTime = it-&gt;second;</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160; nRequestTime = 0;</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;askfor %s %d (%s) peer=%d\n&quot;</span>, inv.<a class="code" href="classCInv.html#a5bf13e9595035d2155b04cceb848c37d">ToString</a>(), nRequestTime, <a class="code" href="utiltime_8cpp.html#a749bc6776c8ec72d7c5e4dea56aee415">DateTimeStrFormat</a>(<span class="stringliteral">&quot;%H:%M:%S&quot;</span>, nRequestTime/1000000), <a class="code" href="classCNode.html#af99591c635f495fc1e6c14745a2a4203">id</a>);</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160;</div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160; <span class="comment">// Make sure not to reuse time indexes to keep things in the same order</span></div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160; int64_t nNow = <a class="code" href="utiltime_8cpp.html#a0c5a06b50cd805b1923552114494c029">GetTimeMicros</a>() - 1000000;</div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160; <span class="keyword">static</span> int64_t nLastTime;</div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160; ++nLastTime;</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160; nNow = std::max(nNow, nLastTime);</div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160; nLastTime = nNow;</div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160;</div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160; <span class="comment">// Each retry is 2 minutes after the last</span></div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160; nRequestTime = std::max(nRequestTime + 2 * 60 * 1000000, nNow);</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="net_8cpp.html#a0df0c10706c3d7255fd1d57a899ad9f2">mapAlreadyAskedFor</a>.end())</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160; <a class="code" href="net_8cpp.html#a0df0c10706c3d7255fd1d57a899ad9f2">mapAlreadyAskedFor</a>.update(it, nRequestTime);</div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160; <a class="code" href="net_8cpp.html#a0df0c10706c3d7255fd1d57a899ad9f2">mapAlreadyAskedFor</a>.insert(std::make_pair(inv.<a class="code" href="classCInv.html#abfa04c38e9c0def9a2b09a9c43929744">hash</a>, nRequestTime));</div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160; <a class="code" href="classCNode.html#a7593dfbd76c34a81169e3fb2aa0e0cf7">mapAskFor</a>.insert(std::make_pair(nRequestTime, inv));</div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160;}</div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160;</div><div class="line"><a name="l02791"></a><span class="lineno"><a class="line" href="classCConnman.html#a8fd1903719cc907b1024088bd715fefb"> 2791</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#a8fd1903719cc907b1024088bd715fefb">CConnman::NodeFullyConnected</a>(<span class="keyword">const</span> <a class="code" href="classCNode.html">CNode</a>* pnode)</div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160;{</div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160; <span class="keywordflow">return</span> pnode &amp;&amp; pnode-&gt;<a class="code" href="classCNode.html#a359647a8e7ad1fc72243b126b35729b6">fSuccessfullyConnected</a> &amp;&amp; !pnode-&gt;<a class="code" href="classCNode.html#af2f7ea958313974e8a948292f060922e">fDisconnect</a>;</div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160;}</div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160;</div><div class="line"><a name="l02796"></a><span class="lineno"><a class="line" href="classCNode.html#a18a0e04d831c69c144d021a7f7ecb14e"> 2796</a></span>&#160;std::vector&lt;unsigned char&gt; <a class="code" href="classCNode.html#a18a0e04d831c69c144d021a7f7ecb14e">CNode::CalculateKeyedNetGroup</a>(<a class="code" href="classCAddress.html">CAddress</a>&amp; address)</div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160;{</div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classCNode.html#a036eeb2db08357a540cd23045a47d17a">vchSecretKey</a>.size() == 0) {</div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160; <a class="code" href="classCNode.html#a036eeb2db08357a540cd23045a47d17a">vchSecretKey</a>.resize(32, 0);</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160; <a class="code" href="random_8cpp.html#ada0c29949c4d1ac0cc027d93c4771423">GetRandBytes</a>(<a class="code" href="classCNode.html#a036eeb2db08357a540cd23045a47d17a">vchSecretKey</a>.data(), <a class="code" href="classCNode.html#a036eeb2db08357a540cd23045a47d17a">vchSecretKey</a>.size());</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160; }</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;</div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160; std::vector&lt;unsigned char&gt; vchGroup;</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160; <a class="code" href="classCSHA256.html">CSHA256</a> hash;</div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160; std::vector&lt;unsigned char&gt; vch(32);</div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160;</div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160; vchGroup = address.<a class="code" href="classCNetAddr.html#a6f8211515f809f6972ce327433d41458">GetGroup</a>();</div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160;</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160; hash.<a class="code" href="classCSHA256.html#a9d7de520a562655da85349372820c883">Write</a>(<a class="code" href="serialize_8h.html#a338401cffbfa31c80b8f64d232306254">begin_ptr</a>(vchGroup), vchGroup.size());</div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160;</div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160; hash.<a class="code" href="classCSHA256.html#a9d7de520a562655da85349372820c883">Write</a>(<a class="code" href="serialize_8h.html#a338401cffbfa31c80b8f64d232306254">begin_ptr</a>(<a class="code" href="classCNode.html#a036eeb2db08357a540cd23045a47d17a">vchSecretKey</a>), <a class="code" href="classCNode.html#a036eeb2db08357a540cd23045a47d17a">vchSecretKey</a>.size());</div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160;</div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160; hash.<a class="code" href="classCSHA256.html#a4259230be0caefa590bc324fc12b9b90">Finalize</a>(<a class="code" href="serialize_8h.html#a338401cffbfa31c80b8f64d232306254">begin_ptr</a>(vch));</div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160; <span class="keywordflow">return</span> vch;</div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160;}</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;</div><div class="line"><a name="l02817"></a><span class="lineno"><a class="line" href="classCConnman.html#af33367840224e80bcfa5c6582dc88170"> 2817</a></span>&#160;<a class="code" href="classCDataStream.html">CDataStream</a> <a class="code" href="classCConnman.html#af33367840224e80bcfa5c6582dc88170">CConnman::BeginMessage</a>(<a class="code" href="classCNode.html">CNode</a>* pnode, <span class="keywordtype">int</span> nVersion, <span class="keywordtype">int</span> <a class="code" href="dash-tx_8cpp.html#ac8bf36fe0577cba66bccda3a6f7e80a4">flags</a>, <span class="keyword">const</span> std::string&amp; sCommand)</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160;{</div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160; <span class="keywordflow">return</span> {<a class="code" href="serialize_8h.html#ae4d5251432e1a9e6803c0240cc492e18a652754eeaf79fba4fcf4c18597a6961c">SER_NETWORK</a>, (nVersion ? nVersion : pnode-&gt;<a class="code" href="classCNode.html#a253ceac237f69cc1155bfb71acd0c48f">GetSendVersion</a>()) | <a class="code" href="dash-tx_8cpp.html#ac8bf36fe0577cba66bccda3a6f7e80a4">flags</a>, <a class="code" href="classCMessageHeader.html">CMessageHeader</a>(<a class="code" href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a>().<a class="code" href="classCChainParams.html#a42f81df0a4f3494e3fc83ab53049fdd9">MessageStart</a>(), sCommand.c_str(), 0) };</div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160;}</div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160;</div><div class="line"><a name="l02822"></a><span class="lineno"><a class="line" href="classCConnman.html#a4f4e4c1e7e161ff31b73f64d97b9900e"> 2822</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a4f4e4c1e7e161ff31b73f64d97b9900e">CConnman::EndMessage</a>(<a class="code" href="classCDataStream.html">CDataStream</a>&amp; strm)</div><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160;{</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160; <span class="comment">// Set the size</span></div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160; assert(strm.<a class="code" href="classCDataStream.html#add30f866dd928fc28c47fe79a0a6723a">size</a> () &gt;= <a class="code" href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aadd8582d526addef583c978e5261dfec1">CMessageHeader::HEADER_SIZE</a>);</div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nSize = strm.<a class="code" href="classCDataStream.html#add30f866dd928fc28c47fe79a0a6723a">size</a>() - <a class="code" href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aadd8582d526addef583c978e5261dfec1">CMessageHeader::HEADER_SIZE</a>;</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160; <a class="code" href="common_8h.html#ab23d5d245f265908700af234252b751f">WriteLE32</a>((uint8_t*)&amp;strm[<a class="code" href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aa73cc507b1a2c32fba10305201e40f2b3">CMessageHeader::MESSAGE_SIZE_OFFSET</a>], nSize);</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160; <span class="comment">// Set the checksum</span></div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160; <a class="code" href="classuint256.html">uint256</a> hash = <a class="code" href="hash_8h.html#ab3f6c437460137530d86e09c2c102e99">Hash</a>(strm.<a class="code" href="classCDataStream.html#a2355d11752d8622badfbc03e9ed192fd">begin</a>() + <a class="code" href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aadd8582d526addef583c978e5261dfec1">CMessageHeader::HEADER_SIZE</a>, strm.<a class="code" href="classCDataStream.html#a66409dbd4403682fe674e2e71173cab4">end</a>());</div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>&#160; <a class="code" href="glibc__compat_8cpp.html#a0f46826ab0466591e136db24394923cf">memcpy</a>((<span class="keywordtype">char</span>*)&amp;strm[<a class="code" href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aad4e76479ab116367800a146dbb299393">CMessageHeader::CHECKSUM_OFFSET</a>], hash.<a class="code" href="classbase__blob.html#aeee68e00ceeacf49086e98b661e017ff">begin</a>(), <a class="code" href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aac92b66287a05d5c96bf494ff5a48e726">CMessageHeader::CHECKSUM_SIZE</a>);</div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160;</div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160;}</div><div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>&#160;</div><div class="line"><a name="l02834"></a><span class="lineno"><a class="line" href="classCConnman.html#ae0274f482f6b25056dc1f9de0bf0dffb"> 2834</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a7083075680ab1633003a4a5acb09b453">CConnman::PushMessage</a>(<a class="code" href="classCNode.html">CNode</a>* pnode, <a class="code" href="classCDataStream.html">CDataStream</a>&amp; strm, <span class="keyword">const</span> std::string&amp; sCommand)</div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;{</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160; <span class="keywordflow">if</span>(strm.<a class="code" href="classCDataStream.html#ab2633ac67f098dad30d03291741c2e42">empty</a>())</div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nSize = strm.<a class="code" href="classCDataStream.html#add30f866dd928fc28c47fe79a0a6723a">size</a>() - <a class="code" href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aadd8582d526addef583c978e5261dfec1">CMessageHeader::HEADER_SIZE</a>;</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160; <a class="code" href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a>(<span class="stringliteral">&quot;net&quot;</span>, <span class="stringliteral">&quot;sending %s (%d bytes) peer=%d\n&quot;</span>, <a class="code" href="utilstrencodings_8cpp.html#a51f420f9333d2019332acb09dbd7524f">SanitizeString</a>(sCommand.c_str()), nSize, pnode-&gt;<a class="code" href="classCNode.html#af99591c635f495fc1e6c14745a2a4203">id</a>);</div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160;</div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160; <span class="keywordtype">size_t</span> nBytesSent = 0;</div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160; {</div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(pnode-&gt;<a class="code" href="classCNode.html#a79edcac83fc5067567c7b41c26fcc56f">cs_vSend</a>);</div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160; <span class="keywordflow">if</span>(pnode-&gt;<a class="code" href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">hSocket</a> == <a class="code" href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a>) {</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160; }</div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160; <span class="keywordtype">bool</span> optimisticSend(pnode-&gt;<a class="code" href="classCNode.html#a68e5fb1a80fe4247aa577a3c9a74b399">vSendMsg</a>.empty());</div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a68e5fb1a80fe4247aa577a3c9a74b399">vSendMsg</a>.emplace_back(strm.<a class="code" href="classCDataStream.html#a2355d11752d8622badfbc03e9ed192fd">begin</a>(), strm.<a class="code" href="classCDataStream.html#a66409dbd4403682fe674e2e71173cab4">end</a>());</div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160;</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160; <span class="comment">//log total amount of bytes per command</span></div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a51e1156224dc77de9c0812f599f1bff4">mapSendBytesPerMsgCmd</a>[sCommand] += strm.<a class="code" href="classCDataStream.html#add30f866dd928fc28c47fe79a0a6723a">size</a>();</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a3c99b7e2b0e53feb58f6859453456f74">nSendSize</a> += strm.<a class="code" href="classCDataStream.html#add30f866dd928fc28c47fe79a0a6723a">size</a>();</div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160; <span class="keywordflow">if</span> (pnode-&gt;<a class="code" href="classCNode.html#a3c99b7e2b0e53feb58f6859453456f74">nSendSize</a> &gt; <a class="code" href="classCConnman.html#ade433492622155412824555e850e3ed9">nSendBufferMaxSize</a>)</div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#a73b323f9e310e3054d909934b37ae671">fPauseSend</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160;</div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160; <span class="comment">// If write queue empty, attempt &quot;optimistic write&quot;</span></div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160; <span class="keywordflow">if</span> (optimisticSend == <span class="keyword">true</span>)</div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160; nBytesSent = <a class="code" href="classCConnman.html#a62a79bcc191112ab8ea87e860a16d2a2">SocketSendData</a>(pnode);</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160; }</div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160; <span class="keywordflow">if</span> (nBytesSent)</div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160; <a class="code" href="classCConnman.html#a494218531e4289a5c0b9c373890454c4">RecordBytesSent</a>(nBytesSent);</div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160;}</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160;</div><div class="line"><a name="l02866"></a><span class="lineno"><a class="line" href="classCConnman.html#aded050ff27f86465d6ca19a6fbe838b8"> 2866</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#a28701e595fcd7dd71791f105457db034">CConnman::ForNode</a>(<span class="keyword">const</span> <a class="code" href="classCService.html">CService</a>&amp; addr, std::function&lt;<span class="keywordtype">bool</span>(<span class="keyword">const</span> <a class="code" href="classCNode.html">CNode</a>* pnode)&gt; cond, std::function&lt;<span class="keywordtype">bool</span>(<a class="code" href="classCNode.html">CNode</a>* pnode)&gt; func)</div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160;{</div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160; <a class="code" href="classCNode.html">CNode</a>* found = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pnode : <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>) {</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160; <span class="keywordflow">if</span>((<a class="code" href="classCService.html">CService</a>)pnode-&gt;<a class="code" href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">addr</a> == addr) {</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160; found = pnode;</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160; }</div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160; }</div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160; <span class="keywordflow">return</span> found != <span class="keyword">nullptr</span> &amp;&amp; cond(found) &amp;&amp; func(found);</div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160;}</div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160;</div><div class="line"><a name="l02879"></a><span class="lineno"><a class="line" href="classCConnman.html#a28701e595fcd7dd71791f105457db034"> 2879</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classCConnman.html#a28701e595fcd7dd71791f105457db034">CConnman::ForNode</a>(<a class="code" href="net_8h.html#a954d746a58632565552615fd0a4ee660">NodeId</a> <span class="keywordtype">id</span>, std::function&lt;<span class="keywordtype">bool</span>(<span class="keyword">const</span> <a class="code" href="classCNode.html">CNode</a>* pnode)&gt; cond, std::function&lt;<span class="keywordtype">bool</span>(<a class="code" href="classCNode.html">CNode</a>* pnode)&gt; func)</div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160;{</div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160; <a class="code" href="classCNode.html">CNode</a>* found = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; pnode : <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>) {</div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160; <span class="keywordflow">if</span>(pnode-&gt;<a class="code" href="classCNode.html#af99591c635f495fc1e6c14745a2a4203">id</a> == <span class="keywordtype">id</span>) {</div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160; found = pnode;</div><div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160; }</div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160; }</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160; <span class="keywordflow">return</span> found != <span class="keyword">nullptr</span> &amp;&amp; cond(found) &amp;&amp; func(found);</div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160;}</div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160;</div><div class="line"><a name="l02892"></a><span class="lineno"><a class="line" href="net_8h.html#a66c6216d339978932308c2d68edd5338"> 2892</a></span>&#160;int64_t <a class="code" href="net_8cpp.html#a66c6216d339978932308c2d68edd5338">PoissonNextSend</a>(int64_t nNow, <span class="keywordtype">int</span> average_interval_seconds) {</div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160; <span class="keywordflow">return</span> nNow + (int64_t)(log1p(<a class="code" href="random_8cpp.html#a27d9149d522b1fa87d84e5e9ca902aef">GetRand</a>(1ULL &lt;&lt; 48) * -0.0000000000000035527136788 <span class="comment">/* -1/2^48 */</span>) * average_interval_seconds * -1000000.0 + 0.5);</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160;}</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;</div><div class="line"><a name="l02896"></a><span class="lineno"><a class="line" href="classCConnman.html#a658377e872bac0f15361b02f38e00bdd"> 2896</a></span>&#160;std::vector&lt;CNode*&gt; <a class="code" href="classCConnman.html#a658377e872bac0f15361b02f38e00bdd">CConnman::CopyNodeVector</a>()</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160;{</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160; std::vector&lt;CNode*&gt; vecNodesCopy;</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>.size(); ++i) {</div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160; <a class="code" href="classCNode.html">CNode</a>* pnode = <a class="code" href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">vNodes</a>[i];</div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#afb65ed679f7bda59aab89e0f5afae292">AddRef</a>();</div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160; vecNodesCopy.push_back(pnode);</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160; }</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160; <span class="keywordflow">return</span> vecNodesCopy;</div><div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160;}</div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160;</div><div class="line"><a name="l02908"></a><span class="lineno"><a class="line" href="classCConnman.html#a8669942dafa1c3875e9899cd5dd87854"> 2908</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classCConnman.html#a8669942dafa1c3875e9899cd5dd87854">CConnman::ReleaseNodeVector</a>(<span class="keyword">const</span> std::vector&lt;CNode*&gt;&amp; vecNodes)</div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160;{</div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160; <a class="code" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a>(<a class="code" href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">cs_vNodes</a>);</div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; vecNodes.size(); ++i) {</div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160; <a class="code" href="classCNode.html">CNode</a>* pnode = vecNodes[i];</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160; pnode-&gt;<a class="code" href="classCNode.html#af804bf7c7f9794e80a3b916e1befece9">Release</a>();</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160; }</div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;}</div><div class="ttc" id="structNodeEvictionCandidate_html_a81cf839352327b7cf93c0cc995e87eb0"><div class="ttname"><a href="structNodeEvictionCandidate.html#a81cf839352327b7cf93c0cc995e87eb0">NodeEvictionCandidate::id</a></div><div class="ttdeci">int id</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00872">net.cpp:872</a></div></div>
<div class="ttc" id="classCConnman_html_af185d7f8ac4389a0247a47cf16e4610c"><div class="ttname"><a href="classCConnman.html#af185d7f8ac4389a0247a47cf16e4610c">CConnman::cs_vAddedNodes</a></div><div class="ttdeci">CCriticalSection cs_vAddedNodes</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00473">net.h:473</a></div></div>
<div class="ttc" id="classCChainParams_html_a402b8df138b265619217ddf934bbc67a"><div class="ttname"><a href="classCChainParams.html#a402b8df138b265619217ddf934bbc67a">CChainParams::DNSSeeds</a></div><div class="ttdeci">const std::vector&lt; CDNSSeedData &gt; &amp; DNSSeeds() const</div><div class="ttdef"><b>Definition:</b> <a href="chainparams_8h_source.html#l00076">chainparams.h:76</a></div></div>
<div class="ttc" id="classCNetCleanup_html_a29b59094c7697b45ca6d13424012506b"><div class="ttname"><a href="classCNetCleanup.html#a29b59094c7697b45ca6d13424012506b">CNetCleanup::~CNetCleanup</a></div><div class="ttdeci">~CNetCleanup()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02272">net.cpp:2272</a></div></div>
<div class="ttc" id="classCAddrMan_html_a69cc6138e696cf88de60925d26023bf2"><div class="ttname"><a href="classCAddrMan.html#a69cc6138e696cf88de60925d26023bf2">CAddrMan::GetAddr</a></div><div class="ttdeci">std::vector&lt; CAddress &gt; GetAddr()</div><div class="ttdoc">Return a bunch of addresses, selected at random. </div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00555">addrman.h:555</a></div></div>
<div class="ttc" id="classlimitedmap_html_ab0a3e4f2ec7c82359300c83a35ae2500"><div class="ttname"><a href="classlimitedmap.html#ab0a3e4f2ec7c82359300c83a35ae2500">limitedmap::const_iterator</a></div><div class="ttdeci">std::map&lt; K, V &gt;::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="limitedmap_8h_source.html#l00019">limitedmap.h:19</a></div></div>
<div class="ttc" id="net_8h_html_abc5c98fcc1211af2b80116dd6e0a035daa28117b0df136a5a8b96c5e887e182a8"><div class="ttname"><a href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035daa28117b0df136a5a8b96c5e887e182a8">LOCAL_UPNP</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00548">net.h:548</a></div></div>
<div class="ttc" id="classCNodeStats_html_a535c198cbe3af112d4538f535e6618cd"><div class="ttname"><a href="classCNodeStats.html#a535c198cbe3af112d4538f535e6618cd">CNodeStats::dPingTime</a></div><div class="ttdeci">double dPingTime</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00611">net.h:611</a></div></div>
<div class="ttc" id="compat_8h_html_ada8711ffab59910a2732cfa4b7c24e29"><div class="ttname"><a href="compat_8h.html#ada8711ffab59910a2732cfa4b7c24e29">WSAEINPROGRESS</a></div><div class="ttdeci">#define WSAEINPROGRESS</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00060">compat.h:60</a></div></div>
<div class="ttc" id="addrdb_8h_html_ae79eefa5f9d20b9761dfc7a41123e668a2c0ec70be7f8b39b69fbe4fbffe82c43"><div class="ttname"><a href="addrdb_8h.html#ae79eefa5f9d20b9761dfc7a41123e668a2c0ec70be7f8b39b69fbe4fbffe82c43">BanReasonManuallyAdded</a></div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8h_source.html#l00023">addrdb.h:23</a></div></div>
<div class="ttc" id="serialize_8h_html_ae4d5251432e1a9e6803c0240cc492e18a652754eeaf79fba4fcf4c18597a6961c"><div class="ttname"><a href="serialize_8h.html#ae4d5251432e1a9e6803c0240cc492e18a652754eeaf79fba4fcf4c18597a6961c">SER_NETWORK</a></div><div class="ttdef"><b>Definition:</b> <a href="serialize_8h_source.html#l00170">serialize.h:170</a></div></div>
<div class="ttc" id="classCConnman_html_a3b31c247f9fc1c0f0d4e5f3482c667b3"><div class="ttname"><a href="classCConnman.html#a3b31c247f9fc1c0f0d4e5f3482c667b3">CConnman::ConnectNode</a></div><div class="ttdeci">CNode * ConnectNode(CAddress addrConnect, const char *pszDest=NULL, bool fConnectToMasternode=false)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00347">net.cpp:347</a></div></div>
<div class="ttc" id="protocol_8h_html_a16af7b253440dadd46a80a4b9fddba4da0494732fc92c975f58783e224585c473"><div class="ttname"><a href="protocol_8h.html#a16af7b253440dadd46a80a4b9fddba4da0494732fc92c975f58783e224585c473">MSG_TX</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00343">protocol.h:343</a></div></div>
<div class="ttc" id="classCAddress_html"><div class="ttname"><a href="classCAddress.html">CAddress</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00279">protocol.h:279</a></div></div>
<div class="ttc" id="classCConnman_html_a85dedb235a648a1b8370228ba62ebacb"><div class="ttname"><a href="classCConnman.html#a85dedb235a648a1b8370228ba62ebacb">CConnman::MarkAddressGood</a></div><div class="ttdeci">void MarkAddressGood(const CAddress &amp;addr)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02385">net.cpp:2385</a></div></div>
<div class="ttc" id="classCConnman_html_af15272cb307fd9128a6099487ae9a8c7"><div class="ttname"><a href="classCConnman.html#af15272cb307fd9128a6099487ae9a8c7">CConnman::CConnman</a></div><div class="ttdeci">CConnman()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02134">net.cpp:2134</a></div></div>
<div class="ttc" id="net_8h_html_a04723cf5ca6f222bf5cd3c7b2aeb6be5"><div class="ttname"><a href="net_8h.html#a04723cf5ca6f222bf5cd3c7b2aeb6be5">SETASKFOR_MAX_SZ</a></div><div class="ttdeci">static const size_t SETASKFOR_MAX_SZ</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00077">net.h:77</a></div></div>
<div class="ttc" id="classCConnman_html_a161f1b41271db1a10cec61a825524b5d"><div class="ttname"><a href="classCConnman.html#a161f1b41271db1a10cec61a825524b5d">CConnman::ProcessOneShot</a></div><div class="ttdeci">void ProcessOneShot()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01602">net.cpp:1602</a></div></div>
<div class="ttc" id="classCConnman_html_ac9af730df4809a6767fb2245f3c2323f"><div class="ttname"><a href="classCConnman.html#ac9af730df4809a6767fb2245f3c2323f">CConnman::setBanned</a></div><div class="ttdeci">banmap_t setBanned</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00465">net.h:465</a></div></div>
<div class="ttc" id="net_8cpp_html_a475f2fc7d8f5cd7511db253cae8fe28a"><div class="ttname"><a href="net_8cpp.html#a475f2fc7d8f5cd7511db253cae8fe28a">GetNodeSignals</a></div><div class="ttdeci">CNodeSignals &amp; GetNodeSignals()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00092">net.cpp:92</a></div></div>
<div class="ttc" id="masternodeman_8cpp_html_a2e783a9a58e9d1ee1535c9890ff48693"><div class="ttname"><a href="masternodeman_8cpp.html#a2e783a9a58e9d1ee1535c9890ff48693">mnodeman</a></div><div class="ttdeci">CMasternodeMan mnodeman</div><div class="ttdef"><b>Definition:</b> <a href="masternodeman_8cpp_source.html#l00017">masternodeman.cpp:17</a></div></div>
<div class="ttc" id="classCConnman_html_add237cb3a836a845b0a4d7c093ef10f4"><div class="ttname"><a href="classCConnman.html#add237cb3a836a845b0a4d7c093ef10f4">CConnman::cs_vWhitelistedRange</a></div><div class="ttdeci">CCriticalSection cs_vWhitelistedRange</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00458">net.h:458</a></div></div>
<div class="ttc" id="compat_8h_html_aef81890a7d46cb9dda85df9b96cba6b1"><div class="ttname"><a href="compat_8h.html#aef81890a7d46cb9dda85df9b96cba6b1">WSAEINTR</a></div><div class="ttdeci">#define WSAEINTR</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00059">compat.h:59</a></div></div>
<div class="ttc" id="net_8cpp_html_a51605827c953a7843f9b165eada26857"><div class="ttname"><a href="net_8cpp.html#a51605827c953a7843f9b165eada26857">GetLocal</a></div><div class="ttdeci">bool GetLocal(CService &amp;addr, const CNetAddr *paddrPeer)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00106">net.cpp:106</a></div></div>
<div class="ttc" id="net_8h_html_a4dd59589d5788e2d620556c43a3381d9"><div class="ttname"><a href="net_8h.html#a4dd59589d5788e2d620556c43a3381d9">MAX_PROTOCOL_MESSAGE_LENGTH</a></div><div class="ttdeci">static const unsigned int MAX_PROTOCOL_MESSAGE_LENGTH</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00059">net.h:59</a></div></div>
<div class="ttc" id="masternode-sync_8cpp_html_a9807e6586e8a7cb25799ea4150520448"><div class="ttname"><a href="masternode-sync_8cpp.html#a9807e6586e8a7cb25799ea4150520448">masternodeSync</a></div><div class="ttdeci">CMasternodeSync masternodeSync</div><div class="ttdef"><b>Definition:</b> <a href="masternode-sync_8cpp_source.html#l00017">masternode-sync.cpp:17</a></div></div>
<div class="ttc" id="classCConnman_html_ac57208a8ea613f814aaf1c5c5e5394a4"><div class="ttname"><a href="classCConnman.html#ac57208a8ea613f814aaf1c5c5e5394a4">CConnman::Ban</a></div><div class="ttdeci">void Ban(const CNetAddr &amp;netAddr, const BanReason &amp;reason, int64_t bantimeoffset=0, bool sinceUnixEpoch=false)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00517">net.cpp:517</a></div></div>
<div class="ttc" id="net_8cpp_html_a1e6c74cfb67940ce1cf68ac2b2934011"><div class="ttname"><a href="net_8cpp.html#a1e6c74cfb67940ce1cf68ac2b2934011">pnodeLocalHost</a></div><div class="ttdeci">static CNode * pnodeLocalHost</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00082">net.cpp:82</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html_ae731ffd18e237d5d4055a52fbbd231ac"><div class="ttname"><a href="structNodeEvictionCandidate.html#ae731ffd18e237d5d4055a52fbbd231ac">NodeEvictionCandidate::fRelayTxes</a></div><div class="ttdeci">bool fRelayTxes</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00878">net.cpp:878</a></div></div>
<div class="ttc" id="classCNode_html_a9c8fd0d0ef6e26896c53380e6d6bf331"><div class="ttname"><a href="classCNode.html#a9c8fd0d0ef6e26896c53380e6d6bf331">CNode::setAskFor</a></div><div class="ttdeci">std::set&lt; uint256 &gt; setAskFor</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00743">net.h:743</a></div></div>
<div class="ttc" id="classCConnman_html_ade433492622155412824555e850e3ed9"><div class="ttname"><a href="classCConnman.html#ade433492622155412824555e850e3ed9">CConnman::nSendBufferMaxSize</a></div><div class="ttdeci">unsigned int nSendBufferMaxSize</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00460">net.h:460</a></div></div>
<div class="ttc" id="classCConnman_html_ab4bc83003310d960423d963148d5c9ec"><div class="ttname"><a href="classCConnman.html#ab4bc83003310d960423d963148d5c9ec">CConnman::~CConnman</a></div><div class="ttdeci">~CConnman()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02369">net.cpp:2369</a></div></div>
<div class="ttc" id="classCNodeStats_html_a03a38f87940d04b321b9fb3102d0368d"><div class="ttname"><a href="classCNodeStats.html#a03a38f87940d04b321b9fb3102d0368d">CNodeStats::dPingWait</a></div><div class="ttdeci">double dPingWait</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00612">net.h:612</a></div></div>
<div class="ttc" id="classCNode_html_a09fbd8c77f6be2b8d4b309c703ce2e13"><div class="ttname"><a href="classCNode.html#a09fbd8c77f6be2b8d4b309c703ce2e13">CNode::filterInventoryKnown</a></div><div class="ttdeci">CRollingBloomFilter filterInventoryKnown</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00740">net.h:740</a></div></div>
<div class="ttc" id="classCClientUIInterface_html_abc63cc3f3e5e15632f713d859dbc6bc2"><div class="ttname"><a href="classCClientUIInterface.html#abc63cc3f3e5e15632f713d859dbc6bc2">CClientUIInterface::InitMessage</a></div><div class="ttdeci">boost::signals2::signal&lt; void(const std::string &amp;message)&gt; InitMessage</div><div class="ttdef"><b>Definition:</b> <a href="ui__interface_8h_source.html#l00083">ui_interface.h:83</a></div></div>
<div class="ttc" id="protocol_8h_html_ad131f3177584caea787cdbf6f85a9537"><div class="ttname"><a href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537">ServiceFlags</a></div><div class="ttdeci">ServiceFlags</div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00253">protocol.h:253</a></div></div>
<div class="ttc" id="classCConnman_html_a7a3ebcaa5b75e2e2e109af35e1c48c9d"><div class="ttname"><a href="classCConnman.html#a7a3ebcaa5b75e2e2e109af35e1c48c9d">CConnman::fMsgProcWake</a></div><div class="ttdeci">bool fMsgProcWake</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00494">net.h:494</a></div></div>
<div class="ttc" id="structCNodeSignals_html_afeb0f429de9477d8e7c003d44050bf00"><div class="ttname"><a href="structCNodeSignals.html#afeb0f429de9477d8e7c003d44050bf00">CNodeSignals::FinalizeNode</a></div><div class="ttdeci">boost::signals2::signal&lt; void(NodeId, bool &amp;)&gt; FinalizeNode</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00536">net.h:536</a></div></div>
<div class="ttc" id="classCNode_html_afb24fb33019af5c4085412fe3898cf01"><div class="ttname"><a href="classCNode.html#afb24fb33019af5c4085412fe3898cf01">CNode::strSubVer</a></div><div class="ttdeci">std::string strSubVer</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00697">net.h:697</a></div></div>
<div class="ttc" id="classCConnman_html_aacdbb7148575a31bb33bc345e2bf22a9"><div class="ttname"><a href="classCConnman.html#aacdbb7148575a31bb33bc345e2bf22a9">CConnman::ThreadMessageHandler</a></div><div class="ttdeci">void ThreadMessageHandler()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01919">net.cpp:1919</a></div></div>
<div class="ttc" id="classCNode_html_a73b323f9e310e3054d909934b37ae671"><div class="ttname"><a href="classCNode.html#a73b323f9e310e3054d909934b37ae671">CNode::fPauseSend</a></div><div class="ttdeci">std::atomic_bool fPauseSend</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00721">net.h:721</a></div></div>
<div class="ttc" id="addrdb_8h_html_ae79eefa5f9d20b9761dfc7a41123e668"><div class="ttname"><a href="addrdb_8h.html#ae79eefa5f9d20b9761dfc7a41123e668">BanReason</a></div><div class="ttdeci">BanReason</div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8h_source.html#l00019">addrdb.h:19</a></div></div>
<div class="ttc" id="classCNode_html_a25c9b62c42159cc94c6e8ede9ad0ed9d"><div class="ttname"><a href="classCNode.html#a25c9b62c42159cc94c6e8ede9ad0ed9d">CNode::fFeeler</a></div><div class="ttdeci">bool fFeeler</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00699">net.h:699</a></div></div>
<div class="ttc" id="classCSemaphoreGrant_html_a8d985eeace74e037baeb39bd2d586576"><div class="ttname"><a href="classCSemaphoreGrant.html#a8d985eeace74e037baeb39bd2d586576">CSemaphoreGrant::Release</a></div><div class="ttdeci">void Release()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00238">sync.h:238</a></div></div>
<div class="ttc" id="classCConnman_html_a5fdad96946aa2bc67961ad973bf65fa5"><div class="ttname"><a href="classCConnman.html#a5fdad96946aa2bc67961ad973bf65fa5">CConnman::RelayTransaction</a></div><div class="ttdeci">void RelayTransaction(const CTransaction &amp;tx)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02477">net.cpp:2477</a></div></div>
<div class="ttc" id="util_8cpp_html_a8d620b8c9865456b925cd0eea4b2ffc1"><div class="ttname"><a href="util_8cpp.html#a8d620b8c9865456b925cd0eea4b2ffc1">SetThreadPriority</a></div><div class="ttdeci">void SetThreadPriority(int nPriority)</div><div class="ttdef"><b>Definition:</b> <a href="util_8cpp_source.html#l00935">util.cpp:935</a></div></div>
<div class="ttc" id="classCNode_html_a01f8cac776bef676651f9b8f3f80ae98"><div class="ttname"><a href="classCNode.html#a01f8cac776bef676651f9b8f3f80ae98">CNode::nRefCount</a></div><div class="ttdeci">int nRefCount</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00717">net.h:717</a></div></div>
<div class="ttc" id="net_8cpp_html_abb92a02eecc581e8927c8a6e31968645"><div class="ttname"><a href="net_8cpp.html#abb92a02eecc581e8927c8a6e31968645">AddLocal</a></div><div class="ttdeci">bool AddLocal(const CService &amp;addr, int nScore)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00205">net.cpp:205</a></div></div>
<div class="ttc" id="structCNodeSignals_html_a1ce7c2d878dee3b81732b8ded51a7d6a"><div class="ttname"><a href="structCNodeSignals.html#a1ce7c2d878dee3b81732b8ded51a7d6a">CNodeSignals::InitializeNode</a></div><div class="ttdeci">boost::signals2::signal&lt; void(CNode *, CConnman &amp;)&gt; InitializeNode</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00535">net.h:535</a></div></div>
<div class="ttc" id="utiltime_8cpp_html_ac635182d3e845eda4af4fa5ab31609da"><div class="ttname"><a href="utiltime_8cpp.html#ac635182d3e845eda4af4fa5ab31609da">MilliSleep</a></div><div class="ttdeci">void MilliSleep(int64_t n)</div><div class="ttdef"><b>Definition:</b> <a href="utiltime_8cpp_source.html#l00063">utiltime.cpp:63</a></div></div>
<div class="ttc" id="classCSemaphoreGrant_html_ab3e6f84f304703abc52517b0c8de26cf"><div class="ttname"><a href="classCSemaphoreGrant.html#ab3e6f84f304703abc52517b0c8de26cf">CSemaphoreGrant::MoveTo</a></div><div class="ttdeci">void MoveTo(CSemaphoreGrant &amp;grant)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00253">sync.h:253</a></div></div>
<div class="ttc" id="classCConnman_html_a70b363e41f5c296834e744d87999edf0"><div class="ttname"><a href="classCConnman.html#a70b363e41f5c296834e744d87999edf0">CConnman::clientInterface</a></div><div class="ttdeci">CClientUIInterface * clientInterface</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00491">net.h:491</a></div></div>
<div class="ttc" id="classCNode_html_ad2f37c291ebec7546d82b23216793f95"><div class="ttname"><a href="classCNode.html#ad2f37c291ebec7546d82b23216793f95">CNode::nLocalServices</a></div><div class="ttdeci">ServiceFlags nLocalServices</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00784">net.h:784</a></div></div>
<div class="ttc" id="random_8cpp_html_a0e44e088732172da6662db2d5e37d4b2"><div class="ttname"><a href="random_8cpp.html#a0e44e088732172da6662db2d5e37d4b2">GetRandInt</a></div><div class="ttdeci">int GetRandInt(int nMax)</div><div class="ttdef"><b>Definition:</b> <a href="random_8cpp_source.html#l00109">random.cpp:109</a></div></div>
<div class="ttc" id="sync_8h_html_aca08e7299069c2d60b8aa726fc550612"><div class="ttname"><a href="sync_8h.html#aca08e7299069c2d60b8aa726fc550612">TRY_LOCK</a></div><div class="ttdeci">#define TRY_LOCK(cs, name)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00170">sync.h:170</a></div></div>
<div class="ttc" id="classlimitedmap_html"><div class="ttname"><a href="classlimitedmap.html">limitedmap</a></div><div class="ttdef"><b>Definition:</b> <a href="limitedmap_8h_source.html#l00013">limitedmap.h:13</a></div></div>
<div class="ttc" id="netaddress_8h_html_acc9a38c714afe79b5035cb36f560dac3a675b0737d6c404a5de25e324c166a4b5"><div class="ttname"><a href="netaddress_8h.html#acc9a38c714afe79b5035cb36f560dac3a675b0737d6c404a5de25e324c166a4b5">NET_MAX</a></div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8h_source.html#l00026">netaddress.h:26</a></div></div>
<div class="ttc" id="classCNode_html_a604bf0cdcd13ec51a2d81976ec33c531"><div class="ttname"><a href="classCNode.html#a604bf0cdcd13ec51a2d81976ec33c531">CNode::grantMasternodeOutbound</a></div><div class="ttdeci">CSemaphoreGrant grantMasternodeOutbound</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00714">net.h:714</a></div></div>
<div class="ttc" id="classCNode_html_a77f6fbd0e06434948ffeb27c6d99cdaa"><div class="ttname"><a href="classCNode.html#a77f6fbd0e06434948ffeb27c6d99cdaa">CNode::nMyStartingHeight</a></div><div class="ttdeci">int nMyStartingHeight</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00785">net.h:785</a></div></div>
<div class="ttc" id="classCExplicitNetCleanup_html_a381b3aec88e5c9432d3777525682c8f5"><div class="ttname"><a href="classCExplicitNetCleanup.html#a381b3aec88e5c9432d3777525682c8f5">CExplicitNetCleanup::callCleanup</a></div><div class="ttdeci">static void callCleanup()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02282">net.cpp:2282</a></div></div>
<div class="ttc" id="net_8h_html"><div class="ttname"><a href="net_8h.html">net.h</a></div></div>
<div class="ttc" id="structCNodeSignals_html_ae96100eac4458c80929678cd6f58bc53"><div class="ttname"><a href="structCNodeSignals.html#ae96100eac4458c80929678cd6f58bc53">CNodeSignals::SendMessages</a></div><div class="ttdeci">boost::signals2::signal&lt; bool(CNode *, CConnman &amp;, std::atomic&lt; bool &gt; &amp;), CombinerAll &gt; SendMessages</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00534">net.h:534</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html"><div class="ttname"><a href="structNodeEvictionCandidate.html">NodeEvictionCandidate</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00857">net.cpp:857</a></div></div>
<div class="ttc" id="net_8h_html_a99a450f0d7268ee95f310f2b78be3370"><div class="ttname"><a href="net_8h.html#a99a450f0d7268ee95f310f2b78be3370">REQUIRED_SERVICES</a></div><div class="ttdeci">static const ServiceFlags REQUIRED_SERVICES</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00089">net.h:89</a></div></div>
<div class="ttc" id="classCNode_html_af2f7ea958313974e8a948292f060922e"><div class="ttname"><a href="classCNode.html#af2f7ea958313974e8a948292f060922e">CNode::fDisconnect</a></div><div class="ttdeci">bool fDisconnect</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00705">net.h:705</a></div></div>
<div class="ttc" id="util_8cpp_html_a2ba7badc843121dde40a6f109d224a42"><div class="ttname"><a href="util_8cpp.html#a2ba7badc843121dde40a6f109d224a42">fDebug</a></div><div class="ttdeci">bool fDebug</div><div class="ttdef"><b>Definition:</b> <a href="util_8cpp_source.html#l00124">util.cpp:124</a></div></div>
<div class="ttc" id="classCNode_html_ac9b30cb93e91a48dacc58821abfc44f0"><div class="ttname"><a href="classCNode.html#ac9b30cb93e91a48dacc58821abfc44f0">CNode::~CNode</a></div><div class="ttdeci">~CNode()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02737">net.cpp:2737</a></div></div>
<div class="ttc" id="net_8h_html_a48a4c7f4f3eac6c8c0f3c1c3fabbee69"><div class="ttname"><a href="net_8h.html#a48a4c7f4f3eac6c8c0f3c1c3fabbee69">DEFAULT_FORCEDNSSEED</a></div><div class="ttdeci">static const bool DEFAULT_FORCEDNSSEED</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00085">net.h:85</a></div></div>
<div class="ttc" id="consensus_8h_html_aa372df0d6494f4aaca5ecf5a5a9d4406"><div class="ttname"><a href="consensus_8h.html#aa372df0d6494f4aaca5ecf5a5a9d4406">MaxBlockSize</a></div><div class="ttdeci">unsigned int MaxBlockSize(bool fDIP0001Active)</div><div class="ttdef"><b>Definition:</b> <a href="consensus_8h_source.html#l00012">consensus.h:12</a></div></div>
<div class="ttc" id="classCConnman_html_a9ad0bc18f18af0b9ed33a6e803aa3793"><div class="ttname"><a href="classCConnman.html#a9ad0bc18f18af0b9ed33a6e803aa3793">CConnman::GetMaxOutboundTarget</a></div><div class="ttdeci">uint64_t GetMaxOutboundTarget()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02568">net.cpp:2568</a></div></div>
<div class="ttc" id="net_8cpp_html_a296b4df8547a28aa11492eee4d0b300f"><div class="ttname"><a href="net_8cpp.html#a296b4df8547a28aa11492eee4d0b300f">CompareKeyedNetGroup</a></div><div class="ttdeci">static bool CompareKeyedNetGroup(const NodeEvictionCandidate &amp;a, const NodeEvictionCandidate &amp;b)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00894">net.cpp:894</a></div></div>
<div class="ttc" id="classCNode_html_a036eeb2db08357a540cd23045a47d17a"><div class="ttname"><a href="classCNode.html#a036eeb2db08357a540cd23045a47d17a">CNode::vchSecretKey</a></div><div class="ttdeci">static std::vector&lt; unsigned char &gt; vchSecretKey</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00776">net.h:776</a></div></div>
<div class="ttc" id="tinyformat_8h_html_a56c674871a61baaad36ad52238c08857"><div class="ttname"><a href="tinyformat_8h.html#a56c674871a61baaad36ad52238c08857">strprintf</a></div><div class="ttdeci">#define strprintf</div><div class="ttdef"><b>Definition:</b> <a href="tinyformat_8h_source.html#l01011">tinyformat.h:1011</a></div></div>
<div class="ttc" id="classCAddrMan_html_a53c27520b7f8c6fa817c2fa869dd4e25"><div class="ttname"><a href="classCAddrMan.html#a53c27520b7f8c6fa817c2fa869dd4e25">CAddrMan::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00437">addrman.h:437</a></div></div>
<div class="ttc" id="structCConnman_1_1ListenSocket_html_acbea1e39ba522ec6dbf318d5e3a75f87"><div class="ttname"><a href="structCConnman_1_1ListenSocket.html#acbea1e39ba522ec6dbf318d5e3a75f87">CConnman::ListenSocket::whitelisted</a></div><div class="ttdeci">bool whitelisted</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00393">net.h:393</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html_a8a122d60d2e80a54434d407b5de57c43"><div class="ttname"><a href="structNodeEvictionCandidate.html#a8a122d60d2e80a54434d407b5de57c43">NodeEvictionCandidate::nTimeConnected</a></div><div class="ttdeci">int64_t nTimeConnected</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00873">net.cpp:873</a></div></div>
<div class="ttc" id="compat_8h_html_ae57d56be40e06a6148c41bb9c1f66eb6"><div class="ttname"><a href="compat_8h.html#ae57d56be40e06a6148c41bb9c1f66eb6">WSAEADDRINUSE</a></div><div class="ttdeci">#define WSAEADDRINUSE</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00061">compat.h:61</a></div></div>
<div class="ttc" id="classCConnman_html_a6e729a956380ac422ab78d842e158df1"><div class="ttname"><a href="classCConnman.html#a6e729a956380ac422ab78d842e158df1">CConnman::DumpBanlist</a></div><div class="ttdeci">void DumpBanlist()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00442">net.cpp:442</a></div></div>
<div class="ttc" id="classCConnman_html_a5204d111b1d9f77e0e6c4a0016a332c9"><div class="ttname"><a href="classCConnman.html#a5204d111b1d9f77e0e6c4a0016a332c9">CConnman::semOutbound</a></div><div class="ttdeci">CSemaphore * semOutbound</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00485">net.h:485</a></div></div>
<div class="ttc" id="classCDataStream_html_ab2633ac67f098dad30d03291741c2e42"><div class="ttname"><a href="classCDataStream.html#ab2633ac67f098dad30d03291741c2e42">CDataStream::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="streams_8h_source.html#l00123">streams.h:123</a></div></div>
<div class="ttc" id="classCInv_html_abfa04c38e9c0def9a2b09a9c43929744"><div class="ttname"><a href="classCInv.html#abfa04c38e9c0def9a2b09a9c43929744">CInv::hash</a></div><div class="ttdeci">uint256 hash</div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00339">protocol.h:339</a></div></div>
<div class="ttc" id="classCConnman_html_ada03158efc97507ad867bcf12e379952"><div class="ttname"><a href="classCConnman.html#ada03158efc97507ad867bcf12e379952">CConnman::FullyConnectedOnly</a></div><div class="ttdeci">static constexpr const CFullyConnectedOnly FullyConnectedOnly</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00154">net.h:154</a></div></div>
<div class="ttc" id="classCConnman_html_a59b3f6615a4e566b34920b6fbb747920"><div class="ttname"><a href="classCConnman.html#a59b3f6615a4e566b34920b6fbb747920">CConnman::vOneShots</a></div><div class="ttdeci">std::deque&lt; std::string &gt; vOneShots</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00470">net.h:470</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html_ada08284fcc0356af24a7721734b7fa85"><div class="ttname"><a href="structNodeEvictionCandidate.html#ada08284fcc0356af24a7721734b7fa85">NodeEvictionCandidate::nMinPingUsecTime</a></div><div class="ttdeci">int64_t nMinPingUsecTime</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00874">net.cpp:874</a></div></div>
<div class="ttc" id="classCScheduler_html"><div class="ttname"><a href="classCScheduler.html">CScheduler</a></div><div class="ttdef"><b>Definition:</b> <a href="scheduler_8h_source.html#l00036">scheduler.h:36</a></div></div>
<div class="ttc" id="classCSubNet_html_a91cabfec6c5056fe8f8b477334563880"><div class="ttname"><a href="classCSubNet.html#a91cabfec6c5056fe8f8b477334563880">CSubNet::ToString</a></div><div class="ttdeci">std::string ToString() const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00660">netaddress.cpp:660</a></div></div>
<div class="ttc" id="netbase_8cpp_html_a82f06e9cca43021fa1c4f234a7fe5e2a"><div class="ttname"><a href="netbase_8cpp.html#a82f06e9cca43021fa1c4f234a7fe5e2a">LookupNumeric</a></div><div class="ttdeci">CService LookupNumeric(const char *pszName, int portDefault)</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00228">netbase.cpp:228</a></div></div>
<div class="ttc" id="classCNodeStats_html_a027a5445a0c40e6489875e653be9c758"><div class="ttname"><a href="classCNodeStats.html#a027a5445a0c40e6489875e653be9c758">CNodeStats::addrLocal</a></div><div class="ttdeci">std::string addrLocal</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00614">net.h:614</a></div></div>
<div class="ttc" id="utiltime_8cpp_html_a749bc6776c8ec72d7c5e4dea56aee415"><div class="ttname"><a href="utiltime_8cpp.html#a749bc6776c8ec72d7c5e4dea56aee415">DateTimeStrFormat</a></div><div class="ttdeci">std::string DateTimeStrFormat(const char *pszFormat, int64_t nTime)</div><div class="ttdef"><b>Definition:</b> <a href="utiltime_8cpp_source.html#l00081">utiltime.cpp:81</a></div></div>
<div class="ttc" id="classCConnman_html_af71dbf1403017b3cdb88ee222c2ca9a4"><div class="ttname"><a href="classCConnman.html#af71dbf1403017b3cdb88ee222c2ca9a4">CConnman::threadSocketHandler</a></div><div class="ttdeci">std::thread threadSocketHandler</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00503">net.h:503</a></div></div>
<div class="ttc" id="structCDNSSeedData_html_a2cf084b163340bd62b67e765799f1fdd"><div class="ttname"><a href="structCDNSSeedData.html#a2cf084b163340bd62b67e765799f1fdd">CDNSSeedData::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition:</b> <a href="chainparams_8h_source.html#l00017">chainparams.h:17</a></div></div>
<div class="ttc" id="classCNetAddr_html"><div class="ttname"><a href="classCNetAddr.html">CNetAddr</a></div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8h_source.html#l00030">netaddress.h:30</a></div></div>
<div class="ttc" id="classCConnman_html_ae6697e1fd73e7d7cff3a699fe2034345"><div class="ttname"><a href="classCConnman.html#ae6697e1fd73e7d7cff3a699fe2034345">CConnman::SetBanned</a></div><div class="ttdeci">void SetBanned(const banmap_t &amp;banmap)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00578">net.cpp:578</a></div></div>
<div class="ttc" id="classCNode_html_a63a6091a0b0fc0987d9436e1ec708423"><div class="ttname"><a href="classCNode.html#a63a6091a0b0fc0987d9436e1ec708423">CNode::CloseSocketDisconnect</a></div><div class="ttdeci">void CloseSocketDisconnect()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00462">net.cpp:462</a></div></div>
<div class="ttc" id="classCConnman_html_a217b6ac63ee4b64199a2d11284d6bee4"><div class="ttname"><a href="classCConnman.html#a217b6ac63ee4b64199a2d11284d6bee4">CConnman::mutexMsgProc</a></div><div class="ttdeci">std::mutex mutexMsgProc</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00497">net.h:497</a></div></div>
<div class="ttc" id="classCClientUIInterface_html_abd111d0c8de20c0d5554ce9d411adad1"><div class="ttname"><a href="classCClientUIInterface.html#abd111d0c8de20c0d5554ce9d411adad1">CClientUIInterface::BannedListChanged</a></div><div class="ttdeci">boost::signals2::signal&lt; void(void)&gt; BannedListChanged</div><div class="ttdef"><b>Definition:</b> <a href="ui__interface_8h_source.html#l00116">ui_interface.h:116</a></div></div>
<div class="ttc" id="classCConnman_html_af6353e401ae90d8621e768c4392b4e4f"><div class="ttname"><a href="classCConnman.html#af6353e401ae90d8621e768c4392b4e4f">CConnman::nMaxFeeler</a></div><div class="ttdeci">int nMaxFeeler</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00489">net.h:489</a></div></div>
<div class="ttc" id="classCConnman_html_af33367840224e80bcfa5c6582dc88170"><div class="ttname"><a href="classCConnman.html#af33367840224e80bcfa5c6582dc88170">CConnman::BeginMessage</a></div><div class="ttdeci">CDataStream BeginMessage(CNode *node, int nVersion, int flags, const std::string &amp;sCommand)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02817">net.cpp:2817</a></div></div>
<div class="ttc" id="classCConnman_html_a6a8dd8e367c6342baf26c697d004906d"><div class="ttname"><a href="classCConnman.html#a6a8dd8e367c6342baf26c697d004906d">CConnman::vhListenSocket</a></div><div class="ttdeci">std::vector&lt; ListenSocket &gt; vhListenSocket</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00463">net.h:463</a></div></div>
<div class="ttc" id="classCNode_html_a108e17226d76c85c89f7d057dad2b088"><div class="ttname"><a href="classCNode.html#a108e17226d76c85c89f7d057dad2b088">CNode::fPauseRecv</a></div><div class="ttdeci">std::atomic_bool fPauseRecv</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00720">net.h:720</a></div></div>
<div class="ttc" id="common_8h_html_ab23d5d245f265908700af234252b751f"><div class="ttname"><a href="common_8h.html#ab23d5d245f265908700af234252b751f">WriteLE32</a></div><div class="ttdeci">static void WriteLE32(unsigned char *ptr, uint32_t x)</div><div class="ttdef"><b>Definition:</b> <a href="common_8h_source.html#l00036">common.h:36</a></div></div>
<div class="ttc" id="protocol_8h_html_ad131f3177584caea787cdbf6f85a9537a9d1154f0e7e56f183a5c8373abe2e86c"><div class="ttname"><a href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537a9d1154f0e7e56f183a5c8373abe2e86c">NODE_NETWORK</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00259">protocol.h:259</a></div></div>
<div class="ttc" id="net_8cpp_html_ac81652eef8570cad19735e421f756c64"><div class="ttname"><a href="net_8cpp.html#ac81652eef8570cad19735e421f756c64">FEELER_SLEEP_WINDOW</a></div><div class="ttdeci">#define FEELER_SLEEP_WINDOW</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00051">net.cpp:51</a></div></div>
<div class="ttc" id="net_8cpp_html_a2f6d62a9d456bf38003df3815b707f46"><div class="ttname"><a href="net_8cpp.html#a2f6d62a9d456bf38003df3815b707f46">SetLimited</a></div><div class="ttdeci">void SetLimited(enum Network net, bool fLimited)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00245">net.cpp:245</a></div></div>
<div class="ttc" id="classCNode_html_a3993ecb1de2a2135a3cf0904346a6f88"><div class="ttname"><a href="classCNode.html#a3993ecb1de2a2135a3cf0904346a6f88">CNode::addr</a></div><div class="ttdeci">CAddress addr</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00688">net.h:688</a></div></div>
<div class="ttc" id="version_8h_html_aa3feca3b6094096fa1b660159bdcb04a"><div class="ttname"><a href="version_8h.html#aa3feca3b6094096fa1b660159bdcb04a">BIP0031_VERSION</a></div><div class="ttdeci">static const int BIP0031_VERSION</div><div class="ttdoc">BIP 0031, pong message, is enabled for all versions AFTER this one. </div><div class="ttdef"><b>Definition:</b> <a href="version_8h_source.html#l00033">version.h:33</a></div></div>
<div class="ttc" id="classCConnman_html_a72472ae8962210960eea780bf0e733f6"><div class="ttname"><a href="classCConnman.html#a72472ae8962210960eea780bf0e733f6">CConnman::GetBanned</a></div><div class="ttdeci">void GetBanned(banmap_t &amp;banmap)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00572">net.cpp:572</a></div></div>
<div class="ttc" id="classCNetAddr_html_a6fe20b8da9701ca5dc2af078e2e8ac25"><div class="ttname"><a href="classCNetAddr.html#a6fe20b8da9701ca5dc2af078e2e8ac25">CNetAddr::IsValid</a></div><div class="ttdeci">bool IsValid() const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00186">netaddress.cpp:186</a></div></div>
<div class="ttc" id="chainparams_8h_html"><div class="ttname"><a href="chainparams_8h.html">chainparams.h</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html_a14bbf6be8778f2998fbad7883ffa0942"><div class="ttname"><a href="structNodeEvictionCandidate.html#a14bbf6be8778f2998fbad7883ffa0942">NodeEvictionCandidate::vchNetGroup</a></div><div class="ttdeci">std::vector&lt; unsigned char &gt; vchNetGroup</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00880">net.cpp:880</a></div></div>
<div class="ttc" id="classCNode_html_ada34ffe1700a5dafb57de7c4d2491844"><div class="ttname"><a href="classCNode.html#ada34ffe1700a5dafb57de7c4d2491844">CNode::nPingUsecTime</a></div><div class="ttdeci">int64_t nPingUsecTime</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00763">net.h:763</a></div></div>
<div class="ttc" id="classCNode_html_a7f39c9fe6b7975531cb9963846aed3e7"><div class="ttname"><a href="classCNode.html#a7f39c9fe6b7975531cb9963846aed3e7">CNode::ReceiveMsgBytes</a></div><div class="ttdeci">bool ReceiveMsgBytes(const char *pch, unsigned int nBytes, bool &amp;complete)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00677">net.cpp:677</a></div></div>
<div class="ttc" id="classCConnman_html_a28701e595fcd7dd71791f105457db034"><div class="ttname"><a href="classCConnman.html#a28701e595fcd7dd71791f105457db034">CConnman::ForNode</a></div><div class="ttdeci">bool ForNode(NodeId id, std::function&lt; bool(const CNode *pnode)&gt; cond, std::function&lt; bool(CNode *pnode)&gt; func)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02879">net.cpp:2879</a></div></div>
<div class="ttc" id="classCAddrMan_html_a244508e8463c4fdfd8b085fcb3b5a225"><div class="ttname"><a href="classCAddrMan.html#a244508e8463c4fdfd8b085fcb3b5a225">CAddrMan::size</a></div><div class="ttdeci">size_t size() const</div><div class="ttdoc">Return the number of (unique) addresses in all tables. </div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00468">addrman.h:468</a></div></div>
<div class="ttc" id="compat_8h_html_a26ef1173e2f2c0d3db27eca28397d723"><div class="ttname"><a href="compat_8h.html#a26ef1173e2f2c0d3db27eca28397d723">SOCKET</a></div><div class="ttdeci">u_int SOCKET</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00052">compat.h:52</a></div></div>
<div class="ttc" id="classCNode_html_af627cc9fe0654487aed7b4224d78ad24"><div class="ttname"><a href="classCNode.html#af627cc9fe0654487aed7b4224d78ad24">CNode::nNextLocalAddrSend</a></div><div class="ttdeci">int64_t nNextLocalAddrSend</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00737">net.h:737</a></div></div>
<div class="ttc" id="dash-tx_8cpp_html_ac8bf36fe0577cba66bccda3a6f7e80a4"><div class="ttname"><a href="dash-tx_8cpp.html#ac8bf36fe0577cba66bccda3a6f7e80a4">flags</a></div><div class="ttdeci">int flags</div><div class="ttdef"><b>Definition:</b> <a href="dash-tx_8cpp_source.html#l00326">dash-tx.cpp:326</a></div></div>
<div class="ttc" id="net_8cpp_html_a37089835ec27ad8bf945a458708165b9"><div class="ttname"><a href="net_8cpp.html#a37089835ec27ad8bf945a458708165b9">fDiscover</a></div><div class="ttdeci">bool fDiscover</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00076">net.cpp:76</a></div></div>
<div class="ttc" id="classCDataStream_html_a66409dbd4403682fe674e2e71173cab4"><div class="ttname"><a href="classCDataStream.html#a66409dbd4403682fe674e2e71173cab4">CDataStream::end</a></div><div class="ttdeci">const_iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="streams_8h_source.html#l00120">streams.h:120</a></div></div>
<div class="ttc" id="classCNode_html_af99591c635f495fc1e6c14745a2a4203"><div class="ttname"><a href="classCNode.html#af99591c635f495fc1e6c14745a2a4203">CNode::id</a></div><div class="ttdeci">NodeId id</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00718">net.h:718</a></div></div>
<div class="ttc" id="hash_8h_html"><div class="ttname"><a href="hash_8h.html">hash.h</a></div></div>
<div class="ttc" id="classCConnman_html_ad59340080a38661aadeac522c2ccf656"><div class="ttname"><a href="classCConnman.html#ad59340080a38661aadeac522c2ccf656">CConnman::DumpData</a></div><div class="ttdeci">void DumpData()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01596">net.cpp:1596</a></div></div>
<div class="ttc" id="classCNetMessage_html_a8f399ad7225f980bdab3ede17b1b23af"><div class="ttname"><a href="classCNetMessage.html#a8f399ad7225f980bdab3ede17b1b23af">CNetMessage::in_data</a></div><div class="ttdeci">bool in_data</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00623">net.h:623</a></div></div>
<div class="ttc" id="net_8cpp_html_a01304c8caa7997b48da307d19d1d284a"><div class="ttname"><a href="net_8cpp.html#a01304c8caa7997b48da307d19d1d284a">GetLocalAddress</a></div><div class="ttdeci">CAddress GetLocalAddress(const CNetAddr *paddrPeer, ServiceFlags nLocalServices)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00155">net.cpp:155</a></div></div>
<div class="ttc" id="classCAddrDB_html"><div class="ttname"><a href="classCAddrDB.html">CAddrDB</a></div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8h_source.html#l00081">addrdb.h:81</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html_a36be97837672cce502d2009f51857359"><div class="ttname"><a href="structNodeEvictionCandidate.html#a36be97837672cce502d2009f51857359">NodeEvictionCandidate::NodeEvictionCandidate</a></div><div class="ttdeci">NodeEvictionCandidate(CNode *pnode)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00859">net.cpp:859</a></div></div>
<div class="ttc" id="classCAddrMan_html_a993e80e74701d7bc6bb49880c387b847"><div class="ttname"><a href="classCAddrMan.html#a993e80e74701d7bc6bb49880c387b847">CAddrMan::Good</a></div><div class="ttdeci">void Good(const CService &amp;addr, int64_t nTime=GetAdjustedTime())</div><div class="ttdoc">Mark an entry as accessible. </div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00518">addrman.h:518</a></div></div>
<div class="ttc" id="classCConnman_html_a6ccf00706c65a961f8abf3d7019406f4"><div class="ttname"><a href="classCConnman.html#a6ccf00706c65a961f8abf3d7019406f4">CConnman::ClearBanned</a></div><div class="ttdeci">void ClearBanned()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00472">net.cpp:472</a></div></div>
<div class="ttc" id="classCConnman_html_a1c476458d499d52f2c87c88d93082a9d"><div class="ttname"><a href="classCConnman.html#a1c476458d499d52f2c87c88d93082a9d">CConnman::DeleteNode</a></div><div class="ttdeci">void DeleteNode(CNode *pnode)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02359">net.cpp:2359</a></div></div>
<div class="ttc" id="utiltime_8cpp_html_a0c5a06b50cd805b1923552114494c029"><div class="ttname"><a href="utiltime_8cpp.html#a0c5a06b50cd805b1923552114494c029">GetTimeMicros</a></div><div class="ttdeci">int64_t GetTimeMicros()</div><div class="ttdef"><b>Definition:</b> <a href="utiltime_8cpp_source.html#l00042">utiltime.cpp:42</a></div></div>
<div class="ttc" id="classCNode_html_a933adb2b192939545a01d602b1d7b53a"><div class="ttname"><a href="classCNode.html#a933adb2b192939545a01d602b1d7b53a">CNode::fNetworkNode</a></div><div class="ttdeci">bool fNetworkNode</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00703">net.h:703</a></div></div>
<div class="ttc" id="classCNode_html_af39253ad525733ca64ab3fc785dfc4eb"><div class="ttname"><a href="classCNode.html#af39253ad525733ca64ab3fc785dfc4eb">CNode::nLastSend</a></div><div class="ttdeci">int64_t nLastSend</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00683">net.h:683</a></div></div>
<div class="ttc" id="classCConnman_html_aefdc911e6c978574ec42051faeaea041"><div class="ttname"><a href="classCConnman.html#aefdc911e6c978574ec42051faeaea041">CConnman::DumpAddresses</a></div><div class="ttdeci">void DumpAddresses()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01585">net.cpp:1585</a></div></div>
<div class="ttc" id="classCConnman_html_a3d45932513c62fe9c489b2aa6ec86316"><div class="ttname"><a href="classCConnman.html#a3d45932513c62fe9c489b2aa6ec86316">CConnman::RelayInv</a></div><div class="ttdeci">void RelayInv(CInv &amp;inv, const int minProtoVersion=MIN_PEER_PROTO_VERSION)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02528">net.cpp:2528</a></div></div>
<div class="ttc" id="net_8cpp_html_af6d341a24d761a509fca026458cf2f72"><div class="ttname"><a href="net_8cpp.html#af6d341a24d761a509fca026458cf2f72">GetListenPort</a></div><div class="ttdeci">unsigned short GetListenPort()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00100">net.cpp:100</a></div></div>
<div class="ttc" id="classCConnman_html_a4f4e4c1e7e161ff31b73f64d97b9900e"><div class="ttname"><a href="classCConnman.html#a4f4e4c1e7e161ff31b73f64d97b9900e">CConnman::EndMessage</a></div><div class="ttdeci">void EndMessage(CDataStream &amp;strm)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02822">net.cpp:2822</a></div></div>
<div class="ttc" id="classCConnman_html_ac3d0e0de8d7ab3f3ac5674aea93389d3"><div class="ttname"><a href="classCConnman.html#ac3d0e0de8d7ab3f3ac5674aea93389d3">CConnman::nMaxOutbound</a></div><div class="ttdeci">int nMaxOutbound</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00488">net.h:488</a></div></div>
<div class="ttc" id="classCNode_html_a18a0e04d831c69c144d021a7f7ecb14e"><div class="ttname"><a href="classCNode.html#a18a0e04d831c69c144d021a7f7ecb14e">CNode::CalculateKeyedNetGroup</a></div><div class="ttdeci">static std::vector&lt; unsigned char &gt; CalculateKeyedNetGroup(CAddress &amp;address)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02796">net.cpp:2796</a></div></div>
<div class="ttc" id="net_8cpp_html_af7487aacfc9d708b3db40c255ec070a8"><div class="ttname"><a href="net_8cpp.html#af7487aacfc9d708b3db40c255ec070a8">SeenLocal</a></div><div class="ttdeci">bool SeenLocal(const CService &amp;addr)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00265">net.cpp:265</a></div></div>
<div class="ttc" id="classCConnman_html_ad2f3516addf9e195688437021a8e3182"><div class="ttname"><a href="classCConnman.html#ad2f3516addf9e195688437021a8e3182">CConnman::BindListenPort</a></div><div class="ttdeci">bool BindListenPort(const CService &amp;bindAddr, std::string &amp;strError, bool fWhitelisted=false)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01964">net.cpp:1964</a></div></div>
<div class="ttc" id="net_8cpp_html_a041f7af36ac1a8be9d6b01e1441c6144"><div class="ttname"><a href="net_8cpp.html#a041f7af36ac1a8be9d6b01e1441c6144">CompareNodeBlockTime</a></div><div class="ttdeci">static bool CompareNodeBlockTime(const NodeEvictionCandidate &amp;a, const NodeEvictionCandidate &amp;b)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00899">net.cpp:899</a></div></div>
<div class="ttc" id="classCService_html_ae274e8b6fc38955d74044d326a405024"><div class="ttname"><a href="classCService.html#ae274e8b6fc38955d74044d326a405024">CService::ToString</a></div><div class="ttdeci">std::string ToString(bool fUseGetnameinfo=true) const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00568">netaddress.cpp:568</a></div></div>
<div class="ttc" id="compat_8h_html_a26769957ec1a2beaf223f33b66ee64ab"><div class="ttname"><a href="compat_8h.html#a26769957ec1a2beaf223f33b66ee64ab">INVALID_SOCKET</a></div><div class="ttdeci">#define INVALID_SOCKET</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00063">compat.h:63</a></div></div>
<div class="ttc" id="classCConnman_html_a47a0fe62e6fb1008c77f3b2150214213"><div class="ttname"><a href="classCConnman.html#a47a0fe62e6fb1008c77f3b2150214213">CConnman::GetAddressCount</a></div><div class="ttdeci">size_t GetAddressCount() const</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02375">net.cpp:2375</a></div></div>
<div class="ttc" id="classCNode_html_a395e2ead02225f29423e211aa2108272"><div class="ttname"><a href="classCNode.html#a395e2ead02225f29423e211aa2108272">CNode::nServicesExpected</a></div><div class="ttdeci">ServiceFlags nServicesExpected</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00667">net.h:667</a></div></div>
<div class="ttc" id="structCConnman_1_1Options_html_a4175e08ea3b9ee7d651824b6d92f1e9b"><div class="ttname"><a href="structCConnman_1_1Options.html#a4175e08ea3b9ee7d651824b6d92f1e9b">CConnman::Options::uiInterface</a></div><div class="ttdeci">CClientUIInterface * uiInterface</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00127">net.h:127</a></div></div>
<div class="ttc" id="net_8h_html_aa994a3fa6352ccb31e5bfc425364daf1"><div class="ttname"><a href="net_8h.html#aa994a3fa6352ccb31e5bfc425364daf1">MAPASKFOR_MAX_SZ</a></div><div class="ttdeci">static const size_t MAPASKFOR_MAX_SZ</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00075">net.h:75</a></div></div>
<div class="ttc" id="classCConnman_html_a47d9024273a8c421fa7de641c30e9081"><div class="ttname"><a href="classCConnman.html#a47d9024273a8c421fa7de641c30e9081">CConnman::AddNewAddresses</a></div><div class="ttdeci">void AddNewAddresses(const std::vector&lt; CAddress &gt; &amp;vAddr, const CAddress &amp;addrFrom, int64_t nTimePenalty=0)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02395">net.cpp:2395</a></div></div>
<div class="ttc" id="classCNetAddr_html_a6f8211515f809f6972ce327433d41458"><div class="ttname"><a href="classCNetAddr.html#a6f8211515f809f6972ce327433d41458">CNetAddr::GetGroup</a></div><div class="ttdeci">std::vector&lt; unsigned char &gt; GetGroup() const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00302">netaddress.cpp:302</a></div></div>
<div class="ttc" id="wallet_8h_html"><div class="ttname"><a href="wallet_8h.html">wallet.h</a></div></div>
<div class="ttc" id="net_8h_html_a52479fcaa2103ab394bc6ba098abf269"><div class="ttname"><a href="net_8h.html#a52479fcaa2103ab394bc6ba098abf269">FEELER_INTERVAL</a></div><div class="ttdeci">static const int FEELER_INTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00053">net.h:53</a></div></div>
<div class="ttc" id="classCNode_html_a3c5bbe8733398b4d14ce05d30aced57e"><div class="ttname"><a href="classCNode.html#a3c5bbe8733398b4d14ce05d30aced57e">CNode::GetLocalNonce</a></div><div class="ttdeci">uint64_t GetLocalNonce() const</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00794">net.h:794</a></div></div>
<div class="ttc" id="classCConnman_html_a8c360ad2471ad7287b27f944aa382441"><div class="ttname"><a href="classCConnman.html#a8c360ad2471ad7287b27f944aa382441">CConnman::nMaxOutboundCycleStartTime</a></div><div class="ttdeci">uint64_t nMaxOutboundCycleStartTime</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00451">net.h:451</a></div></div>
<div class="ttc" id="classCNode_html_a2e28bf088e56fc9d30e99e9de6587743"><div class="ttname"><a href="classCNode.html#a2e28bf088e56fc9d30e99e9de6587743">CNode::pfilter</a></div><div class="ttdeci">CBloomFilter * pfilter</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00716">net.h:716</a></div></div>
<div class="ttc" id="classCNode_html_aca90abe62ee91e752d59981dd7c4f9ed"><div class="ttname"><a href="classCNode.html#aca90abe62ee91e752d59981dd7c4f9ed">CNode::vProcessMsg</a></div><div class="ttdeci">std::list&lt; CNetMessage &gt; vProcessMsg</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00676">net.h:676</a></div></div>
<div class="ttc" id="classCConnman_html_a3b4209a685463cdceeefa0924e4a5f68"><div class="ttname"><a href="classCConnman.html#a3b4209a685463cdceeefa0924e4a5f68">CConnman::AddNewAddress</a></div><div class="ttdeci">void AddNewAddress(const CAddress &amp;addr, const CAddress &amp;addrFrom, int64_t nTimePenalty=0)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02390">net.cpp:2390</a></div></div>
<div class="ttc" id="classCConnman_html_a06596008c9c9709d4573c536742ccc45"><div class="ttname"><a href="classCConnman.html#a06596008c9c9709d4573c536742ccc45">CConnman::nMaxOutboundLimit</a></div><div class="ttdeci">uint64_t nMaxOutboundLimit</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00452">net.h:452</a></div></div>
<div class="ttc" id="net_8h_html_a7853d10884491eae33796656e1673fe3"><div class="ttname"><a href="net_8h.html#a7853d10884491eae33796656e1673fe3">TIMEOUT_INTERVAL</a></div><div class="ttdeci">static const int TIMEOUT_INTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00049">net.h:49</a></div></div>
<div class="ttc" id="classbase__blob_html_aeee68e00ceeacf49086e98b661e017ff"><div class="ttname"><a href="classbase__blob.html#aeee68e00ceeacf49086e98b661e017ff">base_blob::begin</a></div><div class="ttdeci">unsigned char * begin()</div><div class="ttdef"><b>Definition:</b> <a href="uint256_8h_source.html#l00055">uint256.h:55</a></div></div>
<div class="ttc" id="classCAddrMan_html_a03fcc7109b5f014760dc50a81f68c5ec"><div class="ttname"><a href="classCAddrMan.html#a03fcc7109b5f014760dc50a81f68c5ec">CAddrMan::Add</a></div><div class="ttdeci">bool Add(const CAddress &amp;addr, const CNetAddr &amp;source, int64_t nTimePenalty=0)</div><div class="ttdoc">Add a single address. </div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00487">addrman.h:487</a></div></div>
<div class="ttc" id="classCConnman_html_aedb5dff92cf5677c8465bb8ad43312e4"><div class="ttname"><a href="classCConnman.html#aedb5dff92cf5677c8465bb8ad43312e4">CConnman::cs_vOneShots</a></div><div class="ttdeci">CCriticalSection cs_vOneShots</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00471">net.h:471</a></div></div>
<div class="ttc" id="classAnnotatedMixin_html"><div class="ttname"><a href="classAnnotatedMixin.html">AnnotatedMixin&lt; boost::recursive_mutex &gt;</a></div></div>
<div class="ttc" id="compat_8h_html_a6d24fe3ab2906c21c373505ca244f90b"><div class="ttname"><a href="compat_8h.html#a6d24fe3ab2906c21c373505ca244f90b">WSAGetLastError</a></div><div class="ttdeci">#define WSAGetLastError()</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00054">compat.h:54</a></div></div>
<div class="ttc" id="classCConnman_html_a8c2ade2114997b11a70c881456439529"><div class="ttname"><a href="classCConnman.html#a8c2ade2114997b11a70c881456439529">CConnman::nMaxOutboundTotalBytesSentInCycle</a></div><div class="ttdeci">uint64_t nMaxOutboundTotalBytesSentInCycle</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00450">net.h:450</a></div></div>
<div class="ttc" id="net_8cpp_html_a8b9513c93cc783f979f926ef76c16b6e"><div class="ttname"><a href="net_8cpp.html#a8b9513c93cc783f979f926ef76c16b6e">CompareNodeTXTime</a></div><div class="ttdeci">static bool CompareNodeTXTime(const NodeEvictionCandidate &amp;a, const NodeEvictionCandidate &amp;b)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00907">net.cpp:907</a></div></div>
<div class="ttc" id="classCNode_html_a79edcac83fc5067567c7b41c26fcc56f"><div class="ttname"><a href="classCNode.html#a79edcac83fc5067567c7b41c26fcc56f">CNode::cs_vSend</a></div><div class="ttdeci">CCriticalSection cs_vSend</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00673">net.h:673</a></div></div>
<div class="ttc" id="classCNetMessage_html_adbc1669a56462daea5f37e5e99117f8c"><div class="ttname"><a href="classCNetMessage.html#adbc1669a56462daea5f37e5e99117f8c">CNetMessage::readData</a></div><div class="ttdeci">int readData(const char *pch, unsigned int nBytes)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00786">net.cpp:786</a></div></div>
<div class="ttc" id="classCBanDB_html_a0550a06c6b5987869f557467fe7f9896"><div class="ttname"><a href="classCBanDB.html#a0550a06c6b5987869f557467fe7f9896">CBanDB::Write</a></div><div class="ttdeci">bool Write(const banmap_t &amp;banSet)</div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8cpp_source.html#l00024">addrdb.cpp:24</a></div></div>
<div class="ttc" id="classCConnman_html_a734f3771091eeb4cb12aef25c7402469"><div class="ttname"><a href="classCConnman.html#a734f3771091eeb4cb12aef25c7402469">CConnman::cs_setBanned</a></div><div class="ttdeci">CCriticalSection cs_setBanned</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00466">net.h:466</a></div></div>
<div class="ttc" id="classCDataStream_html_aa91abddde56127bd3d6ac2a0fb005874"><div class="ttname"><a href="classCDataStream.html#aa91abddde56127bd3d6ac2a0fb005874">CDataStream::resize</a></div><div class="ttdeci">void resize(size_type n, value_type c=0)</div><div class="ttdef"><b>Definition:</b> <a href="streams_8h_source.html#l00124">streams.h:124</a></div></div>
<div class="ttc" id="masternodeman_8h_html"><div class="ttname"><a href="masternodeman_8h.html">masternodeman.h</a></div></div>
<div class="ttc" id="classCConnman_html_a0b787caf95e52a346a2b31a580d60a62"><div class="ttname"><a href="classCConnman.html#a0b787caf95e52a346a2b31a580d60a62">CConnman::ThreadOpenAddedConnections</a></div><div class="ttdeci">void ThreadOpenAddedConnections()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01816">net.cpp:1816</a></div></div>
<div class="ttc" id="netbase_8cpp_html_a5da7129cf2a5f0ea9e9020e38d2bddc8"><div class="ttname"><a href="netbase_8cpp.html#a5da7129cf2a5f0ea9e9020e38d2bddc8">ConnectSocketByName</a></div><div class="ttdeci">bool ConnectSocketByName(CService &amp;addr, SOCKET &amp;hSocketRet, const char *pszDest, int portDefault, int nTimeout, bool *outProxyConnectionFailed)</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00612">netbase.cpp:612</a></div></div>
<div class="ttc" id="classCConnman_html_ac5a5efb5d7a41f9a6f99c7328997f40d"><div class="ttname"><a href="classCConnman.html#ac5a5efb5d7a41f9a6f99c7328997f40d">CConnman::BannedSetIsDirty</a></div><div class="ttdeci">bool BannedSetIsDirty()</div><div class="ttdoc">check is the banlist has unwritten changes </div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00606">net.cpp:606</a></div></div>
<div class="ttc" id="classCMessageHeader_html_aebbc26feb23d551467ebd58b509204d0"><div class="ttname"><a href="classCMessageHeader.html#aebbc26feb23d551467ebd58b509204d0">CMessageHeader::nMessageSize</a></div><div class="ttdeci">uint32_t nMessageSize</div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00064">protocol.h:64</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html_ad86deabc890ea505a140613dd3b4d080"><div class="ttname"><a href="structNodeEvictionCandidate.html#ad86deabc890ea505a140613dd3b4d080">NodeEvictionCandidate::nLastTXTime</a></div><div class="ttdeci">int64_t nLastTXTime</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00876">net.cpp:876</a></div></div>
<div class="ttc" id="classCConnman_html_a0f7d06bcc905778cbfab8ac33d8efe85"><div class="ttname"><a href="classCConnman.html#a0f7d06bcc905778cbfab8ac33d8efe85">CConnman::GetBestHeight</a></div><div class="ttdeci">int GetBestHeight() const</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02657">net.cpp:2657</a></div></div>
<div class="ttc" id="classCNode_html_a721e2470c2c961b7599768a14be68781"><div class="ttname"><a href="classCNode.html#a721e2470c2c961b7599768a14be68781">CNode::fClient</a></div><div class="ttdeci">bool fClient</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00701">net.h:701</a></div></div>
<div class="ttc" id="classCSHA256_html_a4259230be0caefa590bc324fc12b9b90"><div class="ttname"><a href="classCSHA256.html#a4259230be0caefa590bc324fc12b9b90">CSHA256::Finalize</a></div><div class="ttdeci">void Finalize(unsigned char hash[OUTPUT_SIZE])</div><div class="ttdef"><b>Definition:</b> <a href="sha256_8cpp_source.html#l00167">sha256.cpp:167</a></div></div>
<div class="ttc" id="classCConnman_html_a337ff89eb6c74c70a2d4cd15ed3bc97d"><div class="ttname"><a href="classCConnman.html#a337ff89eb6c74c70a2d4cd15ed3bc97d">CConnman::GetTotalBytesRecv</a></div><div class="ttdeci">uint64_t GetTotalBytesRecv()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02635">net.cpp:2635</a></div></div>
<div class="ttc" id="scheduler_8h_html"><div class="ttname"><a href="scheduler_8h.html">scheduler.h</a></div></div>
<div class="ttc" id="classCConnman_html_a30095fabc2e1727514ad2f2d530a496d"><div class="ttname"><a href="classCConnman.html#a30095fabc2e1727514ad2f2d530a496d">CConnman::GetReceiveFloodSize</a></div><div class="ttdeci">unsigned int GetReceiveFloodSize() const</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02662">net.cpp:2662</a></div></div>
<div class="ttc" id="classCNode_html_a3079fadef397abbf7e8d444f4426ebe7"><div class="ttname"><a href="classCNode.html#a3079fadef397abbf7e8d444f4426ebe7">CNode::nTimeOffset</a></div><div class="ttdeci">int64_t nTimeOffset</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00686">net.h:686</a></div></div>
<div class="ttc" id="classCNode_html_aaa77188d9df85b80e3f8a30292acf6a9"><div class="ttname"><a href="classCNode.html#aaa77188d9df85b80e3f8a30292acf6a9">CNode::copyStats</a></div><div class="ttdeci">void copyStats(CNodeStats &amp;stats)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00635">net.cpp:635</a></div></div>
<div class="ttc" id="net_8cpp_html_a93e4e6fbe288b6e882e697918695f88e"><div class="ttname"><a href="net_8cpp.html#a93e4e6fbe288b6e882e697918695f88e">MapPort</a></div><div class="ttdeci">void MapPort(bool)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01511">net.cpp:1511</a></div></div>
<div class="ttc" id="classCConnman_html_a320b487f2f4437c2518cf6d2b37f95fd"><div class="ttname"><a href="classCConnman.html#a320b487f2f4437c2518cf6d2b37f95fd">CConnman::vNodesDisconnected</a></div><div class="ttdeci">std::list&lt; CNode * &gt; vNodesDisconnected</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00475">net.h:475</a></div></div>
<div class="ttc" id="structAddedNodeInfo_html"><div class="ttname"><a href="structAddedNodeInfo.html">AddedNodeInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00096">net.h:96</a></div></div>
<div class="ttc" id="classCChainParams_html_a2e796bba356e7ce2040f545ea466754f"><div class="ttname"><a href="classCChainParams.html#a2e796bba356e7ce2040f545ea466754f">CChainParams::GetDefaultPort</a></div><div class="ttdeci">int GetDefaultPort() const</div><div class="ttdef"><b>Definition:</b> <a href="chainparams_8h_source.html#l00058">chainparams.h:58</a></div></div>
<div class="ttc" id="namespacegen__base58__test__vectors_html_a8d12b07536a476098e3d74b6a79dfc9a"><div class="ttname"><a href="namespacegen__base58__test__vectors.html#a8d12b07536a476098e3d74b6a79dfc9a">gen_base58_test_vectors.data</a></div><div class="ttdeci">data</div><div class="ttdef"><b>Definition:</b> <a href="gen__base58__test__vectors_8py_source.html#l00123">gen_base58_test_vectors.py:123</a></div></div>
<div class="ttc" id="classCNetAddr_html_a1c6087345e5ca07a151451cd6deb974f"><div class="ttname"><a href="classCNetAddr.html#a1c6087345e5ca07a151451cd6deb974f">CNetAddr::SetIP</a></div><div class="ttdeci">void SetIP(const CNetAddr &amp;ip)</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00023">netaddress.cpp:23</a></div></div>
<div class="ttc" id="structCConnman_1_1Options_html_a0b7a96aca7f3b38561ac6eb85702440e"><div class="ttname"><a href="structCConnman_1_1Options.html#a0b7a96aca7f3b38561ac6eb85702440e">CConnman::Options::nReceiveFloodSize</a></div><div class="ttdeci">unsigned int nReceiveFloodSize</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00129">net.h:129</a></div></div>
<div class="ttc" id="classCDataStream_html_a5542e71bd7af2ab7cd7be0f381d39cb5"><div class="ttname"><a href="classCDataStream.html#a5542e71bd7af2ab7cd7be0f381d39cb5">CDataStream::reserve</a></div><div class="ttdeci">void reserve(size_type n)</div><div class="ttdef"><b>Definition:</b> <a href="streams_8h_source.html#l00125">streams.h:125</a></div></div>
<div class="ttc" id="classCService_html_a71caa0d6aa6ab12758bde8b6a6bcfd2a"><div class="ttname"><a href="classCService.html#a71caa0d6aa6ab12758bde8b6a6bcfd2a">CService::GetPort</a></div><div class="ttdeci">unsigned short GetPort() const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00495">netaddress.cpp:495</a></div></div>
<div class="ttc" id="classCConnman_html_a57501169f1faf1750efc6158f825b531"><div class="ttname"><a href="classCConnman.html#a57501169f1faf1750efc6158f825b531">CConnman::fNetworkActive</a></div><div class="ttdeci">bool fNetworkActive</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00464">net.h:464</a></div></div>
<div class="ttc" id="classCScheduler_html_ad7fcff70877bf1d84f30c1137bba816f"><div class="ttname"><a href="classCScheduler.html#ad7fcff70877bf1d84f30c1137bba816f">CScheduler::scheduleEvery</a></div><div class="ttdeci">void scheduleEvery(Function f, int64_t deltaSeconds)</div><div class="ttdef"><b>Definition:</b> <a href="scheduler_8cpp_source.html#l00117">scheduler.cpp:117</a></div></div>
<div class="ttc" id="util_8cpp_html_af26e0e38b52f08409d399c04cde68c22"><div class="ttname"><a href="util_8cpp.html#af26e0e38b52f08409d399c04cde68c22">fMasterNode</a></div><div class="ttdeci">bool fMasterNode</div><div class="ttdef"><b>Definition:</b> <a href="util_8cpp_source.html#l00108">util.cpp:108</a></div></div>
<div class="ttc" id="classCNode_html_a359647a8e7ad1fc72243b126b35729b6"><div class="ttname"><a href="classCNode.html#a359647a8e7ad1fc72243b126b35729b6">CNode::fSuccessfullyConnected</a></div><div class="ttdeci">std::atomic_bool fSuccessfullyConnected</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00704">net.h:704</a></div></div>
<div class="ttc" id="structCConnman_1_1Options_html"><div class="ttname"><a href="structCConnman_1_1Options.html">CConnman::Options</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00119">net.h:119</a></div></div>
<div class="ttc" id="classCConnman_html_a255a163d4df189aa01faf219c97a2994"><div class="ttname"><a href="classCConnman.html#a255a163d4df189aa01faf219c97a2994">CConnman::GetNodeCount</a></div><div class="ttdeci">size_t GetNodeCount(NumConnections num)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02429">net.cpp:2429</a></div></div>
<div class="ttc" id="netbase_8cpp_html_a6c44614cb5f9293d8419248a0b72d4b0"><div class="ttname"><a href="netbase_8cpp.html#a6c44614cb5f9293d8419248a0b72d4b0">SetSocketNonBlocking</a></div><div class="ttdeci">bool SetSocketNonBlocking(SOCKET &amp;hSocket, bool fNonBlocking)</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00724">netbase.cpp:724</a></div></div>
<div class="ttc" id="classCConnman_html_ad86a46ddbc6c99900d58ab89b65eaece"><div class="ttname"><a href="classCConnman.html#ad86a46ddbc6c99900d58ab89b65eaece">CConnman::GetAddedNodeInfo</a></div><div class="ttdeci">std::vector&lt; AddedNodeInfo &gt; GetAddedNodeInfo()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01764">net.cpp:1764</a></div></div>
<div class="ttc" id="net_8cpp_html_adb45ec1b7c89fd811f480182f45ec546"><div class="ttname"><a href="net_8cpp.html#adb45ec1b7c89fd811f480182f45ec546">mapRelay</a></div><div class="ttdeci">std::map&lt; CInv, CDataStream &gt; mapRelay</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00085">net.cpp:85</a></div></div>
<div class="ttc" id="classCConnman_html_a45a52ec9d3493ca313e9b8cc928c83c7"><div class="ttname"><a href="classCConnman.html#a45a52ec9d3493ca313e9b8cc928c83c7">CConnman::GetMaxOutboundTimeframe</a></div><div class="ttdeci">uint64_t GetMaxOutboundTimeframe()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02574">net.cpp:2574</a></div></div>
<div class="ttc" id="classCNode_html_a33e24a9544df3c60f9e1ec05b5e91051"><div class="ttname"><a href="classCNode.html#a33e24a9544df3c60f9e1ec05b5e91051">CNode::nSendBytes</a></div><div class="ttdeci">uint64_t nSendBytes</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00671">net.h:671</a></div></div>
<div class="ttc" id="classCThreadInterrupt_html_a399a6b881ef3e107eb956239679c5026"><div class="ttname"><a href="classCThreadInterrupt.html#a399a6b881ef3e107eb956239679c5026">CThreadInterrupt::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdef"><b>Definition:</b> <a href="threadinterrupt_8cpp_source.html#l00013">threadinterrupt.cpp:13</a></div></div>
<div class="ttc" id="classCNode_html_a360e2ae57a526e1d9f91ced1c33e2215"><div class="ttname"><a href="classCNode.html#a360e2ae57a526e1d9f91ced1c33e2215">CNode::CNode</a></div><div class="ttdeci">CNode(NodeId id, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn, SOCKET hSocketIn, const CAddress &amp;addrIn, const std::string &amp;addrNameIn=&quot;&quot;, bool fInboundIn=false, bool fNetworkNodeIn=false)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02665">net.cpp:2665</a></div></div>
<div class="ttc" id="classCNode_html_aa1e9c1dc1d5cf806b9be0af155c0bf90"><div class="ttname"><a href="classCNode.html#aa1e9c1dc1d5cf806b9be0af155c0bf90">CNode::fPingQueued</a></div><div class="ttdeci">bool fPingQueued</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00767">net.h:767</a></div></div>
<div class="ttc" id="netbase_8cpp_html_a4a0df7ebe15572508e61c38406e49732"><div class="ttname"><a href="netbase_8cpp.html#a4a0df7ebe15572508e61c38406e49732">HaveNameProxy</a></div><div class="ttdeci">bool HaveNameProxy()</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00561">netbase.cpp:561</a></div></div>
<div class="ttc" id="classCAddrInfo_html_a4569955918c204d2edd073456108ddfd"><div class="ttname"><a href="classCAddrInfo.html#a4569955918c204d2edd073456108ddfd">CAddrInfo::nLastTry</a></div><div class="ttdeci">int64_t nLastTry</div><div class="ttdoc">last try whatsoever by us (memory only) </div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00029">addrman.h:29</a></div></div>
<div class="ttc" id="classCAddrMan_html_a6279e9fdd1b78378c016087daf09a439"><div class="ttname"><a href="classCAddrMan.html#a6279e9fdd1b78378c016087daf09a439">CAddrMan::Select</a></div><div class="ttdeci">CAddrInfo Select(bool newOnly=false)</div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00542">addrman.h:542</a></div></div>
<div class="ttc" id="classCNode_html_af804bf7c7f9794e80a3b916e1befece9"><div class="ttname"><a href="classCNode.html#af804bf7c7f9794e80a3b916e1befece9">CNode::Release</a></div><div class="ttdeci">void Release()</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00829">net.h:829</a></div></div>
<div class="ttc" id="classCNode_html_a157903f7830c0dfbf6a93852066f0b8f"><div class="ttname"><a href="classCNode.html#a157903f7830c0dfbf6a93852066f0b8f">CNode::GetId</a></div><div class="ttdeci">NodeId GetId() const</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00790">net.h:790</a></div></div>
<div class="ttc" id="classCNetAddr_html_aad5f7a372c56ccf4d773f728b6b46e18"><div class="ttname"><a href="classCNetAddr.html#aad5f7a372c56ccf4d773f728b6b46e18">CNetAddr::IsIPv6</a></div><div class="ttdeci">bool IsIPv6() const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00083">netaddress.cpp:83</a></div></div>
<div class="ttc" id="classCConnman_html_a80caf4db74fcf515068f169e085ff84e"><div class="ttname"><a href="classCConnman.html#a80caf4db74fcf515068f169e085ff84e">CConnman::Start</a></div><div class="ttdeci">bool Start(CScheduler &amp;scheduler, std::string &amp;strNodeError, Options options)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02156">net.cpp:2156</a></div></div>
<div class="ttc" id="classCConnman_html_a78fc6a51fab2550bf73787cf1eea2a3c"><div class="ttname"><a href="classCConnman.html#a78fc6a51fab2550bf73787cf1eea2a3c">CConnman::nTotalBytesRecv</a></div><div class="ttdeci">uint64_t nTotalBytesRecv</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00446">net.h:446</a></div></div>
<div class="ttc" id="classCConnman_html_a45b6e23a40a19f9cc3d092fb5e08e6fd"><div class="ttname"><a href="classCConnman.html#a45b6e23a40a19f9cc3d092fb5e08e6fd">CConnman::nLastNodeId</a></div><div class="ttdeci">std::atomic&lt; NodeId &gt; nLastNodeId</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00477">net.h:477</a></div></div>
<div class="ttc" id="utilstrencodings_8h_html"><div class="ttname"><a href="utilstrencodings_8h.html">utilstrencodings.h</a></div></div>
<div class="ttc" id="classCNode_html_af4629eba953ff1d5a3c05437c1b6630a"><div class="ttname"><a href="classCNode.html#af4629eba953ff1d5a3c05437c1b6630a">CNode::nRecvVersion</a></div><div class="ttdeci">std::atomic&lt; int &gt; nRecvVersion</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00681">net.h:681</a></div></div>
<div class="ttc" id="classCConnman_html_a8669942dafa1c3875e9899cd5dd87854"><div class="ttname"><a href="classCConnman.html#a8669942dafa1c3875e9899cd5dd87854">CConnman::ReleaseNodeVector</a></div><div class="ttdeci">void ReleaseNodeVector(const std::vector&lt; CNode *&gt; &amp;vecNodes)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02908">net.cpp:2908</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html_ac42a938f54389f748e532e4e09e190a5"><div class="ttname"><a href="structNodeEvictionCandidate.html#ac42a938f54389f748e532e4e09e190a5">NodeEvictionCandidate::fNetworkNode</a></div><div class="ttdeci">bool fNetworkNode</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00877">net.cpp:877</a></div></div>
<div class="ttc" id="classCConnman_html_a92375a64d1f39823c26c839eb805137f"><div class="ttname"><a href="classCConnman.html#a92375a64d1f39823c26c839eb805137f">CConnman::nMaxConnections</a></div><div class="ttdeci">int nMaxConnections</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00487">net.h:487</a></div></div>
<div class="ttc" id="compat_8h_html_a633b0396ff93d336a088412a190a5072"><div class="ttname"><a href="compat_8h.html#a633b0396ff93d336a088412a190a5072">SOCKET_ERROR</a></div><div class="ttdeci">#define SOCKET_ERROR</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00064">compat.h:64</a></div></div>
<div class="ttc" id="compat_8h_html_a6bc22ed56c6264c63610e14d03a73423"><div class="ttname"><a href="compat_8h.html#a6bc22ed56c6264c63610e14d03a73423">IsSelectableSocket</a></div><div class="ttdeci">static bool IsSelectableSocket(SOCKET s)</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00096">compat.h:96</a></div></div>
<div class="ttc" id="protocol_8h_html_ad131f3177584caea787cdbf6f85a9537a51f819cd0b9ac374d6950a29b4861398"><div class="ttname"><a href="protocol_8h.html#ad131f3177584caea787cdbf6f85a9537a51f819cd0b9ac374d6950a29b4861398">NODE_NONE</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00255">protocol.h:255</a></div></div>
<div class="ttc" id="addrdb_8h_html_af9675d81650e48d20ae495adf73da102"><div class="ttname"><a href="addrdb_8h.html#af9675d81650e48d20ae495adf73da102">banmap_t</a></div><div class="ttdeci">std::map&lt; CSubNet, CBanEntry &gt; banmap_t</div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8h_source.html#l00078">addrdb.h:78</a></div></div>
<div class="ttc" id="net_8cpp_html_a7935254c613d6f3cdadd3ce45f7efbff"><div class="ttname"><a href="net_8cpp.html#a7935254c613d6f3cdadd3ce45f7efbff">fRelayTxes</a></div><div class="ttdeci">bool fRelayTxes</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00078">net.cpp:78</a></div></div>
<div class="ttc" id="util_8cpp_html_a64d956f1dda7f9a80ab5d594532b906d"><div class="ttname"><a href="util_8cpp.html#a64d956f1dda7f9a80ab5d594532b906d">GetBoolArg</a></div><div class="ttdeci">bool GetBoolArg(const std::string &amp;strArg, bool fDefault)</div><div class="ttdef"><b>Definition:</b> <a href="util_8cpp_source.html#l00455">util.cpp:455</a></div></div>
<div class="ttc" id="util_8h_html_afc02c0a4258fedfb316be612bb659ba8"><div class="ttname"><a href="util_8h.html#afc02c0a4258fedfb316be612bb659ba8">LogPrintf</a></div><div class="ttdeci">#define LogPrintf(...)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00098">util.h:98</a></div></div>
<div class="ttc" id="classCConnman_html_af9af880a6906571013cf3f21c2761110"><div class="ttname"><a href="classCConnman.html#af9af880a6906571013cf3f21c2761110">CConnman::RemoveAddedNode</a></div><div class="ttdeci">bool RemoveAddedNode(const std::string &amp;node)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02417">net.cpp:2417</a></div></div>
<div class="ttc" id="structCConnman_1_1CFullyConnectedOnly_html"><div class="ttname"><a href="structCConnman_1_1CFullyConnectedOnly.html">CConnman::CFullyConnectedOnly</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00148">net.h:148</a></div></div>
<div class="ttc" id="classCNode_html_ae0def1498409407d1612833a7d38c875"><div class="ttname"><a href="classCNode.html#ae0def1498409407d1612833a7d38c875">CNode::AskFor</a></div><div class="ttdeci">void AskFor(const CInv &amp;inv)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02745">net.cpp:2745</a></div></div>
<div class="ttc" id="classCConnman_html_a8fd1903719cc907b1024088bd715fefb"><div class="ttname"><a href="classCConnman.html#a8fd1903719cc907b1024088bd715fefb">CConnman::NodeFullyConnected</a></div><div class="ttdeci">static bool NodeFullyConnected(const CNode *pnode)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02791">net.cpp:2791</a></div></div>
<div class="ttc" id="net_8cpp_html_afa6b10687ddaa84fa7ba65b83ad1f069"><div class="ttname"><a href="net_8cpp.html#afa6b10687ddaa84fa7ba65b83ad1f069">GetnScore</a></div><div class="ttdeci">int GetnScore(const CService &amp;addr)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00167">net.cpp:167</a></div></div>
<div class="ttc" id="classCMessageHeader_html_ab1cedd864043d80317912c5e225f342aadd8582d526addef583c978e5261dfec1"><div class="ttname"><a href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aadd8582d526addef583c978e5261dfec1">CMessageHeader::HEADER_SIZE</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00060">protocol.h:60</a></div></div>
<div class="ttc" id="classCConnman_html_a6006659dcdda45215102e5982d4879a1"><div class="ttname"><a href="classCConnman.html#a6006659dcdda45215102e5982d4879a1">CConnman::SetBannedSetDirty</a></div><div class="ttdeci">void SetBannedSetDirty(bool dirty=true)</div><div class="ttdoc">set the &quot;dirty&quot; flag for the banlist </div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00612">net.cpp:612</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html_ae1d8441405e2878dfdd79e8f9c179b0a"><div class="ttname"><a href="structNodeEvictionCandidate.html#ae1d8441405e2878dfdd79e8f9c179b0a">NodeEvictionCandidate::fBloomFilter</a></div><div class="ttdeci">bool fBloomFilter</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00879">net.cpp:879</a></div></div>
<div class="ttc" id="utiltime_8cpp_html_a1c4021a78be4eeffa05732694ab4bab0"><div class="ttname"><a href="utiltime_8cpp.html#a1c4021a78be4eeffa05732694ab4bab0">GetSystemTimeInSeconds</a></div><div class="ttdeci">int64_t GetSystemTimeInSeconds()</div><div class="ttdef"><b>Definition:</b> <a href="utiltime_8cpp_source.html#l00050">utiltime.cpp:50</a></div></div>
<div class="ttc" id="classCService_html_a75b6c84b3184ab809b6dda3576be78ee"><div class="ttname"><a href="classCService.html#a75b6c84b3184ab809b6dda3576be78ee">CService::ToStringIPPort</a></div><div class="ttdeci">std::string ToStringIPPort(bool fUseGetnameinfo=true) const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00559">netaddress.cpp:559</a></div></div>
<div class="ttc" id="structCDNSSeedData_html"><div class="ttname"><a href="structCDNSSeedData.html">CDNSSeedData</a></div><div class="ttdef"><b>Definition:</b> <a href="chainparams_8h_source.html#l00016">chainparams.h:16</a></div></div>
<div class="ttc" id="classCNode_html_ab387bb0c4ffd42e3f0aea233dca0e301"><div class="ttname"><a href="classCNode.html#ab387bb0c4ffd42e3f0aea233dca0e301">CNode::fRelayTxes</a></div><div class="ttdeci">bool fRelayTxes</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00710">net.h:710</a></div></div>
<div class="ttc" id="classCConnman_html_ac95687bc3457cbc25a78abcc2a5cc7fc"><div class="ttname"><a href="classCConnman.html#ac95687bc3457cbc25a78abcc2a5cc7fc">CConnman::CheckIncomingNonce</a></div><div class="ttdeci">bool CheckIncomingNonce(uint64_t nonce)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00337">net.cpp:337</a></div></div>
<div class="ttc" id="classCNode_html_a1b6517682efa0709f44780a95384c4ec"><div class="ttname"><a href="classCNode.html#a1b6517682efa0709f44780a95384c4ec">CNode::addrLocal</a></div><div class="ttdeci">CService addrLocal</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00690">net.h:690</a></div></div>
<div class="ttc" id="classCNode_html"><div class="ttname"><a href="classCNode.html">CNode</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00661">net.h:661</a></div></div>
<div class="ttc" id="util_8h_html_aab1f837a2366f424bdc996fdf6352171"><div class="ttname"><a href="util_8h.html#aab1f837a2366f424bdc996fdf6352171">LogPrint</a></div><div class="ttdeci">static int LogPrint(const char *category, const char *format)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00126">util.h:126</a></div></div>
<div class="ttc" id="classCConnman_html_a4773d15bc6d7d78d15b38a5bc72c992f"><div class="ttname"><a href="classCConnman.html#a4773d15bc6d7d78d15b38a5bc72c992f">CConnman::GetOutboundTargetBytesLeft</a></div><div class="ttdeci">uint64_t GetOutboundTargetBytesLeft()</div><div class="ttdoc">response the bytes left in the current max outbound cycle </div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02626">net.cpp:2626</a></div></div>
<div class="ttc" id="classCTransaction_html"><div class="ttname"><a href="classCTransaction.html">CTransaction</a></div><div class="ttdef"><b>Definition:</b> <a href="transaction_8h_source.html#l00210">transaction.h:210</a></div></div>
<div class="ttc" id="classCConnman_html_a289dca0ee65310fcfc5b552249fc0401"><div class="ttname"><a href="classCConnman.html#a289dca0ee65310fcfc5b552249fc0401">CConnman::Stop</a></div><div class="ttdeci">void Stop()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02306">net.cpp:2306</a></div></div>
<div class="ttc" id="classCConnman_html_ad938d53e18ad8662aa5b8495bf001937"><div class="ttname"><a href="classCConnman.html#ad938d53e18ad8662aa5b8495bf001937">CConnman::GetNodeStats</a></div><div class="ttdeci">void GetNodeStats(std::vector&lt; CNodeStats &gt; &amp;vstats)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02443">net.cpp:2443</a></div></div>
<div class="ttc" id="classCDataStream_html_a2355d11752d8622badfbc03e9ed192fd"><div class="ttname"><a href="classCDataStream.html#a2355d11752d8622badfbc03e9ed192fd">CDataStream::begin</a></div><div class="ttdeci">const_iterator begin() const</div><div class="ttdef"><b>Definition:</b> <a href="streams_8h_source.html#l00118">streams.h:118</a></div></div>
<div class="ttc" id="sync_8h_html_a911fe23f057c2fe5aad629162d6c99d0"><div class="ttname"><a href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0">LOCK</a></div><div class="ttdeci">#define LOCK(cs)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00168">sync.h:168</a></div></div>
<div class="ttc" id="classCConnman_html_a78c7481e9b2575bb1fb37078e28a1c6a"><div class="ttname"><a href="classCConnman.html#a78c7481e9b2575bb1fb37078e28a1c6a">CConnman::NumConnections</a></div><div class="ttdeci">NumConnections</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00112">net.h:112</a></div></div>
<div class="ttc" id="structCConnman_1_1Options_html_a48c33ead9af87461d5d4023e1e34ade2"><div class="ttname"><a href="structCConnman_1_1Options.html#a48c33ead9af87461d5d4023e1e34ade2">CConnman::Options::nMaxOutbound</a></div><div class="ttdeci">int nMaxOutbound</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00124">net.h:124</a></div></div>
<div class="ttc" id="classCConnman_html_af869675d30f1c016912c7ebc2ec8e409"><div class="ttname"><a href="classCConnman.html#af869675d30f1c016912c7ebc2ec8e409">CConnman::semMasternodeOutbound</a></div><div class="ttdeci">CSemaphore * semMasternodeOutbound</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00486">net.h:486</a></div></div>
<div class="ttc" id="compat_8h_html_a9f55d0e90dc8cc6b2287312435cdde48"><div class="ttname"><a href="compat_8h.html#a9f55d0e90dc8cc6b2287312435cdde48">MSG_NOSIGNAL</a></div><div class="ttdeci">#define MSG_NOSIGNAL</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00078">compat.h:78</a></div></div>
<div class="ttc" id="net_8cpp_html_a058b75c6fcc94a0643184c237ad6de93"><div class="ttname"><a href="net_8cpp.html#a058b75c6fcc94a0643184c237ad6de93">IsPeerAddrLocalGood</a></div><div class="ttdeci">bool IsPeerAddrLocalGood(CNode *pnode)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00176">net.cpp:176</a></div></div>
<div class="ttc" id="classCConnman_html_a0cc39d54353d7edc2a57f4a4e4d0912a"><div class="ttname"><a href="classCConnman.html#a0cc39d54353d7edc2a57f4a4e4d0912a">CConnman::OpenNetworkConnection</a></div><div class="ttdeci">bool OpenNetworkConnection(const CAddress &amp;addrConnect, CSemaphoreGrant *grantOutbound=NULL, const char *strDest=NULL, bool fOneShot=false, bool fFeeler=false)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01886">net.cpp:1886</a></div></div>
<div class="ttc" id="classCMessageHeader_html_ab1cedd864043d80317912c5e225f342aad4e76479ab116367800a146dbb299393"><div class="ttname"><a href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aad4e76479ab116367800a146dbb299393">CMessageHeader::CHECKSUM_OFFSET</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00059">protocol.h:59</a></div></div>
<div class="ttc" id="version_8h_html_a2c4c900f5bd0c956cc1a64cd0cc1c318"><div class="ttname"><a href="version_8h.html#a2c4c900f5bd0c956cc1a64cd0cc1c318">INIT_PROTO_VERSION</a></div><div class="ttdeci">static const int INIT_PROTO_VERSION</div><div class="ttdoc">initial proto version, to be increased after version/verack negotiation </div><div class="ttdef"><b>Definition:</b> <a href="version_8h_source.html#l00016">version.h:16</a></div></div>
<div class="ttc" id="netbase_8cpp_html_a0bbba84024b924fe188fbb49125191d5"><div class="ttname"><a href="netbase_8cpp.html#a0bbba84024b924fe188fbb49125191d5">ConnectSocket</a></div><div class="ttdeci">bool ConnectSocket(const CService &amp;addrDest, SOCKET &amp;hSocketRet, int nTimeout, bool *outProxyConnectionFailed)</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00600">netbase.cpp:600</a></div></div>
<div class="ttc" id="net_8cpp_html_a62111271618110807cc534e55c13cb70"><div class="ttname"><a href="net_8cpp.html#a62111271618110807cc534e55c13cb70">cs_mapLocalHost</a></div><div class="ttdeci">CCriticalSection cs_mapLocalHost</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00079">net.cpp:79</a></div></div>
<div class="ttc" id="classCConnman_html_aab00be311fc6aea398d4caf2f9b9e770"><div class="ttname"><a href="classCConnman.html#aab00be311fc6aea398d4caf2f9b9e770">CConnman::vWhitelistedRange</a></div><div class="ttdeci">std::vector&lt; CSubNet &gt; vWhitelistedRange</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00457">net.h:457</a></div></div>
<div class="ttc" id="instantx_8h_html"><div class="ttname"><a href="instantx_8h.html">instantx.h</a></div></div>
<div class="ttc" id="classCNode_html_a72211aaf51af2e981e6b8a1deb73c836"><div class="ttname"><a href="classCNode.html#a72211aaf51af2e981e6b8a1deb73c836">CNode::GetRefCount</a></div><div class="ttdeci">int GetRefCount()</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00802">net.h:802</a></div></div>
<div class="ttc" id="classCConnman_html_a494218531e4289a5c0b9c373890454c4"><div class="ttname"><a href="classCConnman.html#a494218531e4289a5c0b9c373890454c4">CConnman::RecordBytesSent</a></div><div class="ttdeci">void RecordBytesSent(uint64_t bytes)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02541">net.cpp:2541</a></div></div>
<div class="ttc" id="util_8h_html_ac481a378af0229bf71e3d9fee7b938ad"><div class="ttname"><a href="util_8h.html#ac481a378af0229bf71e3d9fee7b938ad">TraceThread</a></div><div class="ttdeci">void TraceThread(const char *name, Callable func)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00249">util.h:249</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html_a04bdf2cf918f5125cd0b9cce4a447374"><div class="ttname"><a href="structNodeEvictionCandidate.html#a04bdf2cf918f5125cd0b9cce4a447374">NodeEvictionCandidate::vchKeyedNetGroup</a></div><div class="ttdeci">std::vector&lt; unsigned char &gt; vchKeyedNetGroup</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00881">net.cpp:881</a></div></div>
<div class="ttc" id="classCConnman_html_a78c7481e9b2575bb1fb37078e28a1c6aa8ee363e1db3837d38b4ce949d29daa7c"><div class="ttname"><a href="classCConnman.html#a78c7481e9b2575bb1fb37078e28a1c6aa8ee363e1db3837d38b4ce949d29daa7c">CConnman::CONNECTIONS_OUT</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00115">net.h:115</a></div></div>
<div class="ttc" id="classCNode_html_a64b2550ec558b6106ebc122d450ad35b"><div class="ttname"><a href="classCNode.html#a64b2550ec558b6106ebc122d450ad35b">CNode::fInbound</a></div><div class="ttdeci">bool fInbound</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00702">net.h:702</a></div></div>
<div class="ttc" id="classCMessageHeader_html"><div class="ttname"><a href="classCMessageHeader.html">CMessageHeader</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00029">protocol.h:29</a></div></div>
<div class="ttc" id="init_8cpp_html_a4fe31b510fc1c2b95321cedb9f89e8de"><div class="ttname"><a href="init_8cpp.html#a4fe31b510fc1c2b95321cedb9f89e8de">uiInterface</a></div><div class="ttdeci">CClientUIInterface uiInterface</div><div class="ttdef"><b>Definition:</b> <a href="init_8cpp_source.html#l00130">init.cpp:130</a></div></div>
<div class="ttc" id="classCNode_html_a9a077fbd09ddee1d81f027bc01a4ec68"><div class="ttname"><a href="classCNode.html#a9a077fbd09ddee1d81f027bc01a4ec68">CNode::nPingNonceSent</a></div><div class="ttdeci">uint64_t nPingNonceSent</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00759">net.h:759</a></div></div>
<div class="ttc" id="classCNode_html_a30f76a69e956d342bdbb400541c98ccb"><div class="ttname"><a href="classCNode.html#a30f76a69e956d342bdbb400541c98ccb">CNode::nProcessQueueSize</a></div><div class="ttdeci">size_t nProcessQueueSize</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00677">net.h:677</a></div></div>
<div class="ttc" id="util_8h_html_af8985880cf4ef26df0a5aa2ffcb76662"><div class="ttname"><a href="util_8h.html#af8985880cf4ef26df0a5aa2ffcb76662">error</a></div><div class="ttdeci">static bool error(const char *format)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00131">util.h:131</a></div></div>
<div class="ttc" id="structLocalServiceInfo_html"><div class="ttname"><a href="structLocalServiceInfo.html">LocalServiceInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00582">net.h:582</a></div></div>
<div class="ttc" id="classCConnman_html_a2e995b2e487c70aa43fd84a0f78305b4"><div class="ttname"><a href="classCConnman.html#a2e995b2e487c70aa43fd84a0f78305b4">CConnman::addrman</a></div><div class="ttdeci">CAddrMan addrman</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00469">net.h:469</a></div></div>
<div class="ttc" id="net_8cpp_html_a0b78d1ae4a3edd7ec2b4bc7b17d6cc79"><div class="ttname"><a href="net_8cpp.html#a0b78d1ae4a3edd7ec2b4bc7b17d6cc79">mapLocalHost</a></div><div class="ttdeci">std::map&lt; CNetAddr, LocalServiceInfo &gt; mapLocalHost</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00080">net.cpp:80</a></div></div>
<div class="ttc" id="net_8h_html_abc5c98fcc1211af2b80116dd6e0a035dafa44f0377f6449a82e1e6176acfe44f7"><div class="ttname"><a href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035dafa44f0377f6449a82e1e6176acfe44f7">LOCAL_IF</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00546">net.h:546</a></div></div>
<div class="ttc" id="net_8h_html_a58a39fe81582f307b3165d13dc7dcf2f"><div class="ttname"><a href="net_8h.html#a58a39fe81582f307b3165d13dc7dcf2f">MAX_OUTBOUND_MASTERNODE_CONNECTIONS</a></div><div class="ttdeci">static const int MAX_OUTBOUND_MASTERNODE_CONNECTIONS</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00065">net.h:65</a></div></div>
<div class="ttc" id="classCNode_html_a05f0401427c5ffebd1ca404848e83ff7"><div class="ttname"><a href="classCNode.html#a05f0401427c5ffebd1ca404848e83ff7">CNode::cleanSubVer</a></div><div class="ttdeci">std::string cleanSubVer</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00697">net.h:697</a></div></div>
<div class="ttc" id="classCConnman_html_aa12d154df14eef07418a36362d1cb8d7"><div class="ttname"><a href="classCConnman.html#aa12d154df14eef07418a36362d1cb8d7">CConnman::OutboundTargetReached</a></div><div class="ttdeci">bool OutboundTargetReached(bool historicalBlockServingLimit)</div><div class="ttdoc">check if the outbound target is reached </div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02606">net.cpp:2606</a></div></div>
<div class="ttc" id="protocol_8cpp_html_a5f8d18ec9217ffee378339dc22ebe20d"><div class="ttname"><a href="protocol_8cpp.html#a5f8d18ec9217ffee378339dc22ebe20d">getAllNetMessageTypes</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; &amp; getAllNetMessageTypes()</div><div class="ttdef"><b>Definition:</b> <a href="protocol_8cpp_source.html#l00275">protocol.cpp:275</a></div></div>
<div class="ttc" id="instantx_8cpp_html_a6ed4b104bfd9f775e0c0a3524a6b4955"><div class="ttname"><a href="instantx_8cpp.html#a6ed4b104bfd9f775e0c0a3524a6b4955">instantsend</a></div><div class="ttdeci">CInstantSend instantsend</div><div class="ttdef"><b>Definition:</b> <a href="instantx_8cpp_source.html#l00030">instantx.cpp:30</a></div></div>
<div class="ttc" id="classCRollingBloomFilter_html_a7615966dc0beaa381892d8f43aeb53a3"><div class="ttname"><a href="classCRollingBloomFilter.html#a7615966dc0beaa381892d8f43aeb53a3">CRollingBloomFilter::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdef"><b>Definition:</b> <a href="bloom_8cpp_source.html#l00266">bloom.cpp:266</a></div></div>
<div class="ttc" id="classCNode_html_a7cef2333aa8776127a7e7fcab659eb6a"><div class="ttname"><a href="classCNode.html#a7cef2333aa8776127a7e7fcab659eb6a">CNode::PushInventory</a></div><div class="ttdeci">void PushInventory(const CInv &amp;inv)</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00866">net.h:866</a></div></div>
<div class="ttc" id="classCConnman_html_a4ee3395b9ce47619ba794649ee86014b"><div class="ttname"><a href="classCConnman.html#a4ee3395b9ce47619ba794649ee86014b">CConnman::threadDNSAddressSeed</a></div><div class="ttdeci">std::thread threadDNSAddressSeed</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00502">net.h:502</a></div></div>
<div class="ttc" id="namespaceNetMsgType_html_aa53772dc0dfe3dc5a6ac2c99444a2afe"><div class="ttname"><a href="namespaceNetMsgType.html#aa53772dc0dfe3dc5a6ac2c99444a2afe">NetMsgType::GETDATA</a></div><div class="ttdeci">const char * GETDATA</div><div class="ttdef"><b>Definition:</b> <a href="protocol_8cpp_source.html#l00020">protocol.cpp:20</a></div></div>
<div class="ttc" id="classCClientUIInterface_html_a496995d44db8dc3e3ef84d345e25967d"><div class="ttname"><a href="classCClientUIInterface.html#a496995d44db8dc3e3ef84d345e25967d">CClientUIInterface::NotifyNumConnectionsChanged</a></div><div class="ttdeci">boost::signals2::signal&lt; void(int newNumConnections)&gt; NotifyNumConnectionsChanged</div><div class="ttdef"><b>Definition:</b> <a href="ui__interface_8h_source.html#l00086">ui_interface.h:86</a></div></div>
<div class="ttc" id="validation_8cpp_html_acc6a734ed0e106c8fcfd4f0ab6501d0a"><div class="ttname"><a href="validation_8cpp.html#acc6a734ed0e106c8fcfd4f0ab6501d0a">fDIP0001ActiveAtTip</a></div><div class="ttdeci">std::atomic&lt; bool &gt; fDIP0001ActiveAtTip</div><div class="ttdef"><b>Definition:</b> <a href="validation_8cpp_source.html#l00089">validation.cpp:89</a></div></div>
<div class="ttc" id="classCConnman_html_a36cf799d267785276497583398dfd4cd"><div class="ttname"><a href="classCConnman.html#a36cf799d267785276497583398dfd4cd">CConnman::SetBestHeight</a></div><div class="ttdeci">void SetBestHeight(int height)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02652">net.cpp:2652</a></div></div>
<div class="ttc" id="classCSemaphore_html"><div class="ttname"><a href="classCSemaphore.html">CSemaphore</a></div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00184">sync.h:184</a></div></div>
<div class="ttc" id="classCNode_html_a3c99b7e2b0e53feb58f6859453456f74"><div class="ttname"><a href="classCNode.html#a3c99b7e2b0e53feb58f6859453456f74">CNode::nSendSize</a></div><div class="ttdeci">size_t nSendSize</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00669">net.h:669</a></div></div>
<div class="ttc" id="compat_8h_html_aff5dd15d0754df75650eb9c3bfa5f86f"><div class="ttname"><a href="compat_8h.html#aff5dd15d0754df75650eb9c3bfa5f86f">THREAD_PRIORITY_BELOW_NORMAL</a></div><div class="ttdeci">#define THREAD_PRIORITY_BELOW_NORMAL</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00087">compat.h:87</a></div></div>
<div class="ttc" id="netaddress_8h_html_acc9a38c714afe79b5035cb36f560dac3"><div class="ttname"><a href="netaddress_8h.html#acc9a38c714afe79b5035cb36f560dac3">Network</a></div><div class="ttdeci">Network</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8h_source.html#l00019">netaddress.h:19</a></div></div>
<div class="ttc" id="classCNode_html_a3da9c559959e182aff8439cd004ff624"><div class="ttname"><a href="classCNode.html#a3da9c559959e182aff8439cd004ff624">CNode::fGetAddr</a></div><div class="ttdeci">bool fGetAddr</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00734">net.h:734</a></div></div>
<div class="ttc" id="classCTxLockRequest_html"><div class="ttname"><a href="classCTxLockRequest.html">CTxLockRequest</a></div><div class="ttdef"><b>Definition:</b> <a href="instantx_8h_source.html#l00121">instantx.h:121</a></div></div>
<div class="ttc" id="net_8h_html_abc5c98fcc1211af2b80116dd6e0a035daad42caef30be428cb73f7d2753b5162e"><div class="ttname"><a href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035daad42caef30be428cb73f7d2753b5162e">LOCAL_BIND</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00547">net.h:547</a></div></div>
<div class="ttc" id="hash_8h_html_ab3f6c437460137530d86e09c2c102e99"><div class="ttname"><a href="hash_8h.html#ab3f6c437460137530d86e09c2c102e99">Hash</a></div><div class="ttdeci">uint256 Hash(const T1 pbegin, const T1 pend)</div><div class="ttdef"><b>Definition:</b> <a href="hash_8h_source.html#l00123">hash.h:123</a></div></div>
<div class="ttc" id="structCConnman_1_1Options_html_a63829fe8ee352b187f14307ce9c4c8b6"><div class="ttname"><a href="structCConnman_1_1Options.html#a63829fe8ee352b187f14307ce9c4c8b6">CConnman::Options::nMaxFeeler</a></div><div class="ttdeci">int nMaxFeeler</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00125">net.h:125</a></div></div>
<div class="ttc" id="classCDataStream_html"><div class="ttname"><a href="classCDataStream.html">CDataStream</a></div><div class="ttdef"><b>Definition:</b> <a href="streams_8h_source.html#l00030">streams.h:30</a></div></div>
<div class="ttc" id="structNodeEvictionCandidate_html_a13e9f6fa3d68cf3c428c18452302a3c6"><div class="ttname"><a href="structNodeEvictionCandidate.html#a13e9f6fa3d68cf3c428c18452302a3c6">NodeEvictionCandidate::nLastBlockTime</a></div><div class="ttdeci">int64_t nLastBlockTime</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00875">net.cpp:875</a></div></div>
<div class="ttc" id="net_8cpp_html_a57df927b0cbc3f797a858aa2625aeb20"><div class="ttname"><a href="net_8cpp.html#a57df927b0cbc3f797a858aa2625aeb20">vRelayExpiration</a></div><div class="ttdeci">std::deque&lt; pair&lt; int64_t, CInv &gt; &gt; vRelayExpiration</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00086">net.cpp:86</a></div></div>
<div class="ttc" id="classCNode_html_a68e5fb1a80fe4247aa577a3c9a74b399"><div class="ttname"><a href="classCNode.html#a68e5fb1a80fe4247aa577a3c9a74b399">CNode::vSendMsg</a></div><div class="ttdeci">std::deque&lt; CSerializeData &gt; vSendMsg</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00672">net.h:672</a></div></div>
<div class="ttc" id="classCSemaphoreGrant_html"><div class="ttname"><a href="classCSemaphoreGrant.html">CSemaphoreGrant</a></div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00223">sync.h:223</a></div></div>
<div class="ttc" id="classCNode_html_a119824dcaebcd3c8e272a68f19a60c43"><div class="ttname"><a href="classCNode.html#a119824dcaebcd3c8e272a68f19a60c43">CNode::fMasternode</a></div><div class="ttdeci">bool fMasternode</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00712">net.h:712</a></div></div>
<div class="ttc" id="classCConnman_html_a8855eb8f432a1fe07b2cc373cc9a3a50"><div class="ttname"><a href="classCConnman.html#a8855eb8f432a1fe07b2cc373cc9a3a50">CConnman::nReceiveFloodSize</a></div><div class="ttdeci">unsigned int nReceiveFloodSize</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00461">net.h:461</a></div></div>
<div class="ttc" id="net_8h_html_abc5c98fcc1211af2b80116dd6e0a035da1d33b76bcbc0dbb757cc02bb2259775b"><div class="ttname"><a href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035da1d33b76bcbc0dbb757cc02bb2259775b">LOCAL_NONE</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00545">net.h:545</a></div></div>
<div class="ttc" id="classCBloomFilter_html"><div class="ttname"><a href="classCBloomFilter.html">CBloomFilter</a></div><div class="ttdef"><b>Definition:</b> <a href="bloom_8h_source.html#l00044">bloom.h:44</a></div></div>
<div class="ttc" id="classCNode_html_aaa7ed919e1ed445dd9589b984231ba46"><div class="ttname"><a href="classCNode.html#aaa7ed919e1ed445dd9589b984231ba46">CNode::GetLocalServices</a></div><div class="ttdeci">ServiceFlags GetLocalServices() const</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00897">net.h:897</a></div></div>
<div class="ttc" id="net_8cpp_html_a6c58f8ccc4c93105a44caf588562d609"><div class="ttname"><a href="net_8cpp.html#a6c58f8ccc4c93105a44caf588562d609">strSubVersion</a></div><div class="ttdeci">std::string strSubVersion</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00083">net.cpp:83</a></div></div>
<div class="ttc" id="classCConnman_html_a658377e872bac0f15361b02f38e00bdd"><div class="ttname"><a href="classCConnman.html#a658377e872bac0f15361b02f38e00bdd">CConnman::CopyNodeVector</a></div><div class="ttdeci">std::vector&lt; CNode * &gt; CopyNodeVector()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02896">net.cpp:2896</a></div></div>
<div class="ttc" id="classCConnman_html_a46915b82dd2183baf2944d74d88a4228"><div class="ttname"><a href="classCConnman.html#a46915b82dd2183baf2944d74d88a4228">CConnman::SetServices</a></div><div class="ttdeci">void SetServices(const CService &amp;addr, ServiceFlags nServices)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02380">net.cpp:2380</a></div></div>
<div class="ttc" id="classCAddress_html_a24e2309d92694a5a234751634bdf0458"><div class="ttname"><a href="classCAddress.html#a24e2309d92694a5a234751634bdf0458">CAddress::nServices</a></div><div class="ttdeci">ServiceFlags nServices</div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00307">protocol.h:307</a></div></div>
<div class="ttc" id="classCConnman_html_a492f8afd8cbd66b16401727d2f521e43"><div class="ttname"><a href="classCConnman.html#a492f8afd8cbd66b16401727d2f521e43">CConnman::nTotalBytesSent</a></div><div class="ttdeci">uint64_t nTotalBytesSent</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00447">net.h:447</a></div></div>
<div class="ttc" id="structCConnman_1_1ListenSocket_html_a89f7b8ffa14007712f339484ac315fc9"><div class="ttname"><a href="structCConnman_1_1ListenSocket.html#a89f7b8ffa14007712f339484ac315fc9">CConnman::ListenSocket::socket</a></div><div class="ttdeci">SOCKET socket</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00392">net.h:392</a></div></div>
<div class="ttc" id="netbase_8cpp_html_aeb0961aecb19bbca063c3514b25b20c9"><div class="ttname"><a href="netbase_8cpp.html#aeb0961aecb19bbca063c3514b25b20c9">CloseSocket</a></div><div class="ttdeci">bool CloseSocket(SOCKET &amp;hSocket)</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00711">netbase.cpp:711</a></div></div>
<div class="ttc" id="netbase_8cpp_html_ac8115c6e2874217f2e487b5391cbe963"><div class="ttname"><a href="netbase_8cpp.html#ac8115c6e2874217f2e487b5391cbe963">nConnectTimeout</a></div><div class="ttdeci">int nConnectTimeout</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00036">netbase.cpp:36</a></div></div>
<div class="ttc" id="net_8cpp_html_a272e900bb201601d6842e465bec135af"><div class="ttname"><a href="net_8cpp.html#a272e900bb201601d6842e465bec135af">DUMP_ADDRESSES_INTERVAL</a></div><div class="ttdeci">#define DUMP_ADDRESSES_INTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00048">net.cpp:48</a></div></div>
<div class="ttc" id="netbase_8h_html"><div class="ttname"><a href="netbase_8h.html">netbase.h</a></div></div>
<div class="ttc" id="compat_8h_html_a4ba23242bee4784b72a0a170e2f975a0"><div class="ttname"><a href="compat_8h.html#a4ba23242bee4784b72a0a170e2f975a0">WSAEWOULDBLOCK</a></div><div class="ttdeci">#define WSAEWOULDBLOCK</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00057">compat.h:57</a></div></div>
<div class="ttc" id="structCConnman_1_1Options_html_a857dbc21954a6613fe0a3939521ae8c8"><div class="ttname"><a href="structCConnman_1_1Options.html#a857dbc21954a6613fe0a3939521ae8c8">CConnman::Options::nLocalServices</a></div><div class="ttdeci">ServiceFlags nLocalServices</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00121">net.h:121</a></div></div>
<div class="ttc" id="clientversion_8cpp_html_ac3e3098552063f228d9deac38a8b9848"><div class="ttname"><a href="clientversion_8cpp.html#ac3e3098552063f228d9deac38a8b9848">FormatFullVersion</a></div><div class="ttdeci">std::string FormatFullVersion()</div><div class="ttdef"><b>Definition:</b> <a href="clientversion_8cpp_source.html#l00089">clientversion.cpp:89</a></div></div>
<div class="ttc" id="protocol_8h_html_a16af7b253440dadd46a80a4b9fddba4da3a28db7deec3a185c981b159a7b235fc"><div class="ttname"><a href="protocol_8h.html#a16af7b253440dadd46a80a4b9fddba4da3a28db7deec3a185c981b159a7b235fc">MSG_MASTERNODE_ANNOUNCE</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00360">protocol.h:360</a></div></div>
<div class="ttc" id="net_8cpp_html_a6dfc4be12d34c83608661113ac3693fc"><div class="ttname"><a href="net_8cpp.html#a6dfc4be12d34c83608661113ac3693fc">NET_MESSAGE_COMMAND_OTHER</a></div><div class="ttdeci">static const std::string NET_MESSAGE_COMMAND_OTHER</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00068">net.cpp:68</a></div></div>
<div class="ttc" id="classCBanDB_html_aa3bb0e398409c933bf79a9af56c807f2"><div class="ttname"><a href="classCBanDB.html#aa3bb0e398409c933bf79a9af56c807f2">CBanDB::Read</a></div><div class="ttdeci">bool Read(banmap_t &amp;banSet)</div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8cpp_source.html#l00062">addrdb.cpp:62</a></div></div>
<div class="ttc" id="classCNode_html_aff4b68eeeee9bf1e27e14f2436a07556"><div class="ttname"><a href="classCNode.html#aff4b68eeeee9bf1e27e14f2436a07556">CNode::nNextAddrSend</a></div><div class="ttdeci">int64_t nNextAddrSend</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00736">net.h:736</a></div></div>
<div class="ttc" id="classCNetMessage_html_a80a6f95f0c187aa97788118248cbf452"><div class="ttname"><a href="classCNetMessage.html#a80a6f95f0c187aa97788118248cbf452">CNetMessage::hdrbuf</a></div><div class="ttdeci">CDataStream hdrbuf</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00625">net.h:625</a></div></div>
<div class="ttc" id="classCChainParams_html_a42f81df0a4f3494e3fc83ab53049fdd9"><div class="ttname"><a href="classCChainParams.html#a42f81df0a4f3494e3fc83ab53049fdd9">CChainParams::MessageStart</a></div><div class="ttdeci">const CMessageHeader::MessageStartChars &amp; MessageStart() const</div><div class="ttdef"><b>Definition:</b> <a href="chainparams_8h_source.html#l00056">chainparams.h:56</a></div></div>
<div class="ttc" id="classCAddrMan_html_ab3234587a7d74e0329906005342a7824"><div class="ttname"><a href="classCAddrMan.html#ab3234587a7d74e0329906005342a7824">CAddrMan::SetServices</a></div><div class="ttdeci">void SetServices(const CService &amp;addr, ServiceFlags nServices)</div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00578">addrman.h:578</a></div></div>
<div class="ttc" id="classCNetCleanup_html_a928d536c21f6190defda6d6ea2726347"><div class="ttname"><a href="classCNetCleanup.html#a928d536c21f6190defda6d6ea2726347">CNetCleanup::CNetCleanup</a></div><div class="ttdeci">CNetCleanup()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02270">net.cpp:2270</a></div></div>
<div class="ttc" id="classCConnman_html_a2fdedb3739836bdc19590ad84960a3a6"><div class="ttname"><a href="classCConnman.html#a2fdedb3739836bdc19590ad84960a3a6">CConnman::flagInterruptMsgProc</a></div><div class="ttdeci">std::atomic&lt; bool &gt; flagInterruptMsgProc</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00498">net.h:498</a></div></div>
<div class="ttc" id="classCConnman_html_a246c1e7e5f8bb3e148a03177fd410517"><div class="ttname"><a href="classCConnman.html#a246c1e7e5f8bb3e148a03177fd410517">CConnman::nLocalServices</a></div><div class="ttdeci">ServiceFlags nLocalServices</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00480">net.h:480</a></div></div>
<div class="ttc" id="structCDNSSeedData_html_a70f5da8568016651cfb7ec7dbf01b3f0"><div class="ttname"><a href="structCDNSSeedData.html#a70f5da8568016651cfb7ec7dbf01b3f0">CDNSSeedData::host</a></div><div class="ttdeci">std::string host</div><div class="ttdef"><b>Definition:</b> <a href="chainparams_8h_source.html#l00017">chainparams.h:17</a></div></div>
<div class="ttc" id="serialize_8h_html_a338401cffbfa31c80b8f64d232306254"><div class="ttname"><a href="serialize_8h.html#a338401cffbfa31c80b8f64d232306254">begin_ptr</a></div><div class="ttdeci">V::value_type * begin_ptr(V &amp;v)</div><div class="ttdef"><b>Definition:</b> <a href="serialize_8h_source.html#l00054">serialize.h:54</a></div></div>
<div class="ttc" id="classCNetMessage_html"><div class="ttname"><a href="classCNetMessage.html">CNetMessage</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00621">net.h:621</a></div></div>
<div class="ttc" id="classCNetCleanup_html"><div class="ttname"><a href="classCNetCleanup.html">CNetCleanup</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02267">net.cpp:2267</a></div></div>
<div class="ttc" id="classCNode_html_a8352aa332af726ff117fb890c4dd3869"><div class="ttname"><a href="classCNode.html#a8352aa332af726ff117fb890c4dd3869">CNode::nPingUsecStart</a></div><div class="ttdeci">int64_t nPingUsecStart</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00761">net.h:761</a></div></div>
<div class="ttc" id="classCService_html_a77782219f5d85f326b4c089cb2636e6f"><div class="ttname"><a href="classCService.html#a77782219f5d85f326b4c089cb2636e6f">CService::SetSockAddr</a></div><div class="ttdeci">bool SetSockAddr(const struct sockaddr *paddr)</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00481">netaddress.cpp:481</a></div></div>
<div class="ttc" id="classCNode_html_afb65ed679f7bda59aab89e0f5afae292"><div class="ttname"><a href="classCNode.html#afb65ed679f7bda59aab89e0f5afae292">CNode::AddRef</a></div><div class="ttdeci">CNode * AddRef()</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00822">net.h:822</a></div></div>
<div class="ttc" id="classCNode_html_a7cda6efa6a9ef9db3eebe70fc3bdd45a"><div class="ttname"><a href="classCNode.html#a7cda6efa6a9ef9db3eebe70fc3bdd45a">CNode::hSocket</a></div><div class="ttdeci">SOCKET hSocket</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00668">net.h:668</a></div></div>
<div class="ttc" id="structCNodeSignals_html"><div class="ttname"><a href="structCNodeSignals.html">CNodeSignals</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00531">net.h:531</a></div></div>
<div class="ttc" id="namespacezmq__sub_html_ab82b53c595929ff5ab2d30ec91fd539a"><div class="ttname"><a href="namespacezmq__sub.html#ab82b53c595929ff5ab2d30ec91fd539a">zmq_sub.msg</a></div><div class="ttdeci">msg</div><div class="ttdef"><b>Definition:</b> <a href="zmq__sub_8py_source.html#l00022">zmq_sub.py:22</a></div></div>
<div class="ttc" id="classCNode_html_afb40f43a51ba686de93256727351af07"><div class="ttname"><a href="classCNode.html#afb40f43a51ba686de93256727351af07">CNode::nLastRecv</a></div><div class="ttdeci">int64_t nLastRecv</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00684">net.h:684</a></div></div>
<div class="ttc" id="classCAddrDB_html_aed4b567fb7c2dd15b2856e7c769967b7"><div class="ttname"><a href="classCAddrDB.html#aed4b567fb7c2dd15b2856e7c769967b7">CAddrDB::Read</a></div><div class="ttdeci">bool Read(CAddrMan &amp;addr)</div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8cpp_source.html#l00159">addrdb.cpp:159</a></div></div>
<div class="ttc" id="classCNode_html_a8bbe2a7052476d62acf7f0a5a9c5981b"><div class="ttname"><a href="classCNode.html#a8bbe2a7052476d62acf7f0a5a9c5981b">CNode::nRecvBytes</a></div><div class="ttdeci">uint64_t nRecvBytes</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00680">net.h:680</a></div></div>
<div class="ttc" id="classCConnman_html_a78c7481e9b2575bb1fb37078e28a1c6aa45b675928145678b43b3927be215c60f"><div class="ttname"><a href="classCConnman.html#a78c7481e9b2575bb1fb37078e28a1c6aa45b675928145678b43b3927be215c60f">CConnman::CONNECTIONS_ALL</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00116">net.h:116</a></div></div>
<div class="ttc" id="classCConnman_html_a4353881f4ed5f9fb22f13acdf1608a0a"><div class="ttname"><a href="classCConnman.html#a4353881f4ed5f9fb22f13acdf1608a0a">CConnman::interruptNet</a></div><div class="ttdeci">CThreadInterrupt interruptNet</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00500">net.h:500</a></div></div>
<div class="ttc" id="classCInv_html_a5bf13e9595035d2155b04cceb848c37d"><div class="ttname"><a href="classCInv.html#a5bf13e9595035d2155b04cceb848c37d">CInv::ToString</a></div><div class="ttdeci">std::string ToString() const</div><div class="ttdef"><b>Definition:</b> <a href="protocol_8cpp_source.html#l00266">protocol.cpp:266</a></div></div>
<div class="ttc" id="net_8cpp_html_a826edd40636cbaa44266b97c8c6a4fa3"><div class="ttname"><a href="net_8cpp.html#a826edd40636cbaa44266b97c8c6a4fa3">X</a></div><div class="ttdeci">#define X(name)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00634">net.cpp:634</a></div></div>
<div class="ttc" id="classCNode_html_ad3096c14b54aa39a02edb63a4a734c3e"><div class="ttname"><a href="classCNode.html#ad3096c14b54aa39a02edb63a4a734c3e">CNode::fWhitelisted</a></div><div class="ttdeci">bool fWhitelisted</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00698">net.h:698</a></div></div>
<div class="ttc" id="classCNetMessage_html_a1a500121037490eec4b238906f3a23ad"><div class="ttname"><a href="classCNetMessage.html#a1a500121037490eec4b238906f3a23ad">CNetMessage::nHdrPos</a></div><div class="ttdeci">unsigned int nHdrPos</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00627">net.h:627</a></div></div>
<div class="ttc" id="structCConnman_1_1CAllNodes_html"><div class="ttname"><a href="structCConnman_1_1CAllNodes.html">CConnman::CAllNodes</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00156">net.h:156</a></div></div>
<div class="ttc" id="util_8cpp_html_a8e02420c2f7c53579ccb90acf301ae75"><div class="ttname"><a href="util_8cpp.html#a8e02420c2f7c53579ccb90acf301ae75">fLogIPs</a></div><div class="ttdeci">bool fLogIPs</div><div class="ttdef"><b>Definition:</b> <a href="util_8cpp_source.html#l00133">util.cpp:133</a></div></div>
<div class="ttc" id="classCConnman_html_a4f931ae01a4c822a307620f4816cdee5"><div class="ttname"><a href="classCConnman.html#a4f931ae01a4c822a307620f4816cdee5">CConnman::Unban</a></div><div class="ttdeci">bool Unban(const CNetAddr &amp;ip)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00554">net.cpp:554</a></div></div>
<div class="ttc" id="classCNetMessage_html_a418f59287d1805dda6959f27a170c855"><div class="ttname"><a href="classCNetMessage.html#a418f59287d1805dda6959f27a170c855">CNetMessage::nDataPos</a></div><div class="ttdeci">unsigned int nDataPos</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00630">net.h:630</a></div></div>
<div class="ttc" id="classCSubNet_html"><div class="ttname"><a href="classCSubNet.html">CSubNet</a></div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8h_source.html#l00094">netaddress.h:94</a></div></div>
<div class="ttc" id="classCNode_html_a1e8b0784cc82f33edc2dc4e2834d1ff0"><div class="ttname"><a href="classCNode.html#a1e8b0784cc82f33edc2dc4e2834d1ff0">CNode::cs_inventory</a></div><div class="ttdeci">CCriticalSection cs_inventory</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00742">net.h:742</a></div></div>
<div class="ttc" id="classCConnman_html_a50689d29e242bd9070f17bc62d32e90f"><div class="ttname"><a href="classCConnman.html#a50689d29e242bd9070f17bc62d32e90f">CConnman::cs_totalBytesSent</a></div><div class="ttdeci">CCriticalSection cs_totalBytesSent</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00445">net.h:445</a></div></div>
<div class="ttc" id="classCConnman_html_a61837aadc0749654a483532d145c277b"><div class="ttname"><a href="classCConnman.html#a61837aadc0749654a483532d145c277b">CConnman::DisconnectNode</a></div><div class="ttdeci">bool DisconnectNode(const std::string &amp;node)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02456">net.cpp:2456</a></div></div>
<div class="ttc" id="classCNode_html_a4d077afd5c600b9e3241abce4df60722"><div class="ttname"><a href="classCNode.html#a4d077afd5c600b9e3241abce4df60722">CNode::nMinPingUsecTime</a></div><div class="ttdeci">int64_t nMinPingUsecTime</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00765">net.h:765</a></div></div>
<div class="ttc" id="classuint256_html"><div class="ttname"><a href="classuint256.html">uint256</a></div><div class="ttdef"><b>Definition:</b> <a href="uint256_8h_source.html#l00114">uint256.h:114</a></div></div>
<div class="ttc" id="classCNode_html_a1a1c0d94de0197c5c4abf5a8d13364f3"><div class="ttname"><a href="classCNode.html#a1a1c0d94de0197c5c4abf5a8d13364f3">CNode::hashContinue</a></div><div class="ttdeci">uint256 hashContinue</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00728">net.h:728</a></div></div>
<div class="ttc" id="classCNode_html_ad253434141efcbca34150864069aee7e"><div class="ttname"><a href="classCNode.html#ad253434141efcbca34150864069aee7e">CNode::nLastBlockTime</a></div><div class="ttdeci">std::atomic&lt; int64_t &gt; nLastBlockTime</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00754">net.h:754</a></div></div>
<div class="ttc" id="net_8cpp_html_af6de8e47b01a96206402ddef734114f2"><div class="ttname"><a href="net_8cpp.html#af6de8e47b01a96206402ddef734114f2">IsReachable</a></div><div class="ttdeci">bool IsReachable(enum Network net)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00285">net.cpp:285</a></div></div>
<div class="ttc" id="classCConnman_html_a058d19652e32dbc88f548e8654d675af"><div class="ttname"><a href="classCConnman.html#a058d19652e32dbc88f548e8654d675af">CConnman::AddWhitelistedRange</a></div><div class="ttdeci">void AddWhitelistedRange(const CSubNet &amp;subnet)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00628">net.cpp:628</a></div></div>
<div class="ttc" id="net_8cpp_html_a66c6216d339978932308c2d68edd5338"><div class="ttname"><a href="net_8cpp.html#a66c6216d339978932308c2d68edd5338">PoissonNextSend</a></div><div class="ttdeci">int64_t PoissonNextSend(int64_t nNow, int average_interval_seconds)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02892">net.cpp:2892</a></div></div>
<div class="ttc" id="structLocalServiceInfo_html_aa5c39fec8cc69a43e393bb158f69224b"><div class="ttname"><a href="structLocalServiceInfo.html#aa5c39fec8cc69a43e393bb158f69224b">LocalServiceInfo::nPort</a></div><div class="ttdeci">int nPort</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00584">net.h:584</a></div></div>
<div class="ttc" id="classCNetAddr_html_a474ea3874554fe3b79f607fdef97c243"><div class="ttname"><a href="classCNetAddr.html#a474ea3874554fe3b79f607fdef97c243">CNetAddr::ToString</a></div><div class="ttdeci">std::string ToString() const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00266">netaddress.cpp:266</a></div></div>
<div class="ttc" id="net_8cpp_html_ae1ed86ae54e13fe5f0ae1c12e48e3a0e"><div class="ttname"><a href="net_8cpp.html#ae1ed86ae54e13fe5f0ae1c12e48e3a0e">cs_mapRelay</a></div><div class="ttdeci">CCriticalSection cs_mapRelay</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00087">net.cpp:87</a></div></div>
<div class="ttc" id="classCConnman_html_a999ec42f1515f77096556c94c29c6538"><div class="ttname"><a href="classCConnman.html#a999ec42f1515f77096556c94c29c6538">CConnman::WakeMessageHandler</a></div><div class="ttdeci">void WakeMessageHandler()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01387">net.cpp:1387</a></div></div>
<div class="ttc" id="protocol_8h_html_a16af7b253440dadd46a80a4b9fddba4dab7e23cc7eff00496b50b04e9e98f1b85"><div class="ttname"><a href="protocol_8h.html#a16af7b253440dadd46a80a4b9fddba4dab7e23cc7eff00496b50b04e9e98f1b85">MSG_DSTX</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00362">protocol.h:362</a></div></div>
<div class="ttc" id="addrman_8h_html"><div class="ttname"><a href="addrman_8h.html">addrman.h</a></div></div>
<div class="ttc" id="classCConnman_html_a77e704e5251f7545d2f87d81f08181f2"><div class="ttname"><a href="classCConnman.html#a77e704e5251f7545d2f87d81f08181f2">CConnman::threadOpenConnections</a></div><div class="ttdeci">std::thread threadOpenConnections</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00505">net.h:505</a></div></div>
<div class="ttc" id="classCAddress_html_ac1c44aac968b11f90ce529b133ae4e9b"><div class="ttname"><a href="classCAddress.html#ac1c44aac968b11f90ce529b133ae4e9b">CAddress::nTime</a></div><div class="ttdeci">unsigned int nTime</div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00310">protocol.h:310</a></div></div>
<div class="ttc" id="classCNodeStats_html_a6bfc3caa74e3e8621808969b178e9864"><div class="ttname"><a href="classCNodeStats.html#a6bfc3caa74e3e8621808969b178e9864">CNodeStats::dMinPing</a></div><div class="ttdeci">double dMinPing</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00613">net.h:613</a></div></div>
<div class="ttc" id="classCAddrMan_html_a7aba66d9e9527522fed974567d34c322"><div class="ttname"><a href="classCAddrMan.html#a7aba66d9e9527522fed974567d34c322">CAddrMan::Connected</a></div><div class="ttdeci">void Connected(const CService &amp;addr, int64_t nTime=GetAdjustedTime())</div><div class="ttdoc">Mark an entry as currently-connected-to. </div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00568">addrman.h:568</a></div></div>
<div class="ttc" id="classCNode_html_a253ceac237f69cc1155bfb71acd0c48f"><div class="ttname"><a href="classCNode.html#a253ceac237f69cc1155bfb71acd0c48f">CNode::GetSendVersion</a></div><div class="ttdeci">int GetSendVersion() const</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00742">net.cpp:742</a></div></div>
<div class="ttc" id="classCConnman_html_a03645ed0eb723430af180ad2ae36adc3"><div class="ttname"><a href="classCConnman.html#a03645ed0eb723430af180ad2ae36adc3">CConnman::condMsgProc</a></div><div class="ttdeci">std::condition_variable condMsgProc</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00496">net.h:496</a></div></div>
<div class="ttc" id="structLocalServiceInfo_html_ad6a9d404fb109ba1506df3f6ca842ed5"><div class="ttname"><a href="structLocalServiceInfo.html#ad6a9d404fb109ba1506df3f6ca842ed5">LocalServiceInfo::nScore</a></div><div class="ttdeci">int nScore</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00583">net.h:583</a></div></div>
<div class="ttc" id="classCConnman_html_ab07810a88d9b1d7a0309509cf0cadd57"><div class="ttname"><a href="classCConnman.html#ab07810a88d9b1d7a0309509cf0cadd57">CConnman::fAddressesInitialized</a></div><div class="ttdeci">bool fAddressesInitialized</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00468">net.h:468</a></div></div>
<div class="ttc" id="classCSHA256_html_a9d7de520a562655da85349372820c883"><div class="ttname"><a href="classCSHA256.html#a9d7de520a562655da85349372820c883">CSHA256::Write</a></div><div class="ttdeci">CSHA256 &amp; Write(const unsigned char *data, size_t len)</div><div class="ttdef"><b>Definition:</b> <a href="sha256_8cpp_source.html#l00141">sha256.cpp:141</a></div></div>
<div class="ttc" id="serialize_8h_html_a849636cca14fcbcfdd38f70254c0da58"><div class="ttname"><a href="serialize_8h.html#a849636cca14fcbcfdd38f70254c0da58">MAX_SIZE</a></div><div class="ttdeci">static const unsigned int MAX_SIZE</div><div class="ttdef"><b>Definition:</b> <a href="serialize_8h_source.html#l00026">serialize.h:26</a></div></div>
<div class="ttc" id="net_8cpp_html_ae0d0a697455bede4a91f09af856e9146"><div class="ttname"><a href="net_8cpp.html#ae0d0a697455bede4a91f09af856e9146">convertSeed6</a></div><div class="ttdeci">static std::vector&lt; CAddress &gt; convertSeed6(const std::vector&lt; SeedSpec6 &gt; &amp;vSeedsIn)</div><div class="ttdoc">Convert the pnSeeds6 array into usable address objects. </div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00131">net.cpp:131</a></div></div>
<div class="ttc" id="classCNode_html_ac0e40c335b80782bb5258dc4ffa94e34"><div class="ttname"><a href="classCNode.html#ac0e40c335b80782bb5258dc4ffa94e34">CNode::nSendVersion</a></div><div class="ttdeci">int nSendVersion</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00786">net.h:786</a></div></div>
<div class="ttc" id="net_8cpp_html_a040c40f60af5f50a128fc1aac4cb5ebd"><div class="ttname"><a href="net_8cpp.html#a040c40f60af5f50a128fc1aac4cb5ebd">RemoveLocal</a></div><div class="ttdeci">bool RemoveLocal(const CService &amp;addr)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00236">net.cpp:236</a></div></div>
<div class="ttc" id="classCNode_html_a97a9784cba9ad06fd9444d940f5c011c"><div class="ttname"><a href="classCNode.html#a97a9784cba9ad06fd9444d940f5c011c">CNode::nNumWarningsSkipped</a></div><div class="ttdeci">int nNumWarningsSkipped</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00691">net.h:691</a></div></div>
<div class="ttc" id="chainparams_8cpp_html_ace5c5b706d71a324a417dd2db394fd4a"><div class="ttname"><a href="chainparams_8cpp.html#ace5c5b706d71a324a417dd2db394fd4a">Params</a></div><div class="ttdeci">const CChainParams &amp; Params()</div><div class="ttdef"><b>Definition:</b> <a href="chainparams_8cpp_source.html#l00424">chainparams.cpp:424</a></div></div>
<div class="ttc" id="classCConnman_html_ab07ed95cf52f589101bda8fc881d2da1"><div class="ttname"><a href="classCConnman.html#ab07ed95cf52f589101bda8fc881d2da1">CConnman::GetTotalBytesSent</a></div><div class="ttdeci">uint64_t GetTotalBytesSent()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02641">net.cpp:2641</a></div></div>
<div class="ttc" id="classCConnman_html_adce92c07b7355e841906b59cafdbe0c5"><div class="ttname"><a href="classCConnman.html#adce92c07b7355e841906b59cafdbe0c5">CConnman::vNodes</a></div><div class="ttdeci">std::vector&lt; CNode * &gt; vNodes</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00474">net.h:474</a></div></div>
<div class="ttc" id="glibc__compat_8cpp_html_a0f46826ab0466591e136db24394923cf"><div class="ttname"><a href="glibc__compat_8cpp.html#a0f46826ab0466591e136db24394923cf">memcpy</a></div><div class="ttdeci">void * memcpy(void *a, const void *b, size_t c)</div><div class="ttdef"><b>Definition:</b> <a href="glibc__compat_8cpp_source.html#l00017">glibc_compat.cpp:17</a></div></div>
<div class="ttc" id="classCConnman_html_a9971c08442c2c5b23ec6598f9ef427db"><div class="ttname"><a href="classCConnman.html#a9971c08442c2c5b23ec6598f9ef427db">CConnman::SetMaxOutboundTarget</a></div><div class="ttdeci">void SetMaxOutboundTarget(uint64_t limit)</div><div class="ttdoc">set the max outbound target in bytes </div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02558">net.cpp:2558</a></div></div>
<div class="ttc" id="classCConnman_html_a12e5839242677181ea3633636670b062"><div class="ttname"><a href="classCConnman.html#a12e5839242677181ea3633636670b062">CConnman::ThreadMnbRequestConnections</a></div><div class="ttdeci">void ThreadMnbRequestConnections()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01842">net.cpp:1842</a></div></div>
<div class="ttc" id="classCNode_html_a973d29d89889cba8fe7909b1b8959592"><div class="ttname"><a href="classCNode.html#a973d29d89889cba8fe7909b1b8959592">CNode::nLastTXTime</a></div><div class="ttdeci">std::atomic&lt; int64_t &gt; nLastTXTime</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00755">net.h:755</a></div></div>
<div class="ttc" id="classCBanDB_html"><div class="ttname"><a href="classCBanDB.html">CBanDB</a></div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8h_source.html#l00093">addrdb.h:93</a></div></div>
<div class="ttc" id="classCConnman_html_a765597cbfe99c083d8fa3d61bb464e34"><div class="ttname"><a href="classCConnman.html#a765597cbfe99c083d8fa3d61bb464e34">CConnman::ThreadSocketHandler</a></div><div class="ttdeci">void ThreadSocketHandler()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01109">net.cpp:1109</a></div></div>
<div class="ttc" id="version_8h_html_a4e2497f7c9c4319adcaf945159ec63f4"><div class="ttname"><a href="version_8h.html#a4e2497f7c9c4319adcaf945159ec63f4">PROTOCOL_VERSION</a></div><div class="ttdeci">static const int PROTOCOL_VERSION</div><div class="ttdef"><b>Definition:</b> <a href="version_8h_source.html#l00013">version.h:13</a></div></div>
<div class="ttc" id="utiltime_8cpp_html_a139d0fe6387b9e230a9b8bb12d9b43b9"><div class="ttname"><a href="utiltime_8cpp.html#a139d0fe6387b9e230a9b8bb12d9b43b9">GetTimeMillis</a></div><div class="ttdeci">int64_t GetTimeMillis()</div><div class="ttdef"><b>Definition:</b> <a href="utiltime_8cpp_source.html#l00034">utiltime.cpp:34</a></div></div>
<div class="ttc" id="classCTransaction_html_a7efd1379de830341417c0bfa23a149aa"><div class="ttname"><a href="classCTransaction.html#a7efd1379de830341417c0bfa23a149aa">CTransaction::GetHash</a></div><div class="ttdeci">const uint256 &amp; GetHash() const</div><div class="ttdef"><b>Definition:</b> <a href="transaction_8h_source.html#l00262">transaction.h:262</a></div></div>
<div class="ttc" id="classCConnman_html_a609c5f40a52ca8d5036f65ebdb70469f"><div class="ttname"><a href="classCConnman.html#a609c5f40a52ca8d5036f65ebdb70469f">CConnman::GetLocalServices</a></div><div class="ttdeci">ServiceFlags GetLocalServices() const</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02647">net.cpp:2647</a></div></div>
<div class="ttc" id="classCConnman_html_adb38e15b9237df805562255d3ee8fa7e"><div class="ttname"><a href="classCConnman.html#adb38e15b9237df805562255d3ee8fa7e">CConnman::vAddedNodes</a></div><div class="ttdeci">std::vector&lt; std::string &gt; vAddedNodes</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00472">net.h:472</a></div></div>
<div class="ttc" id="net_8h_html_abb358e6d9aa1383e5196cb61f9357265"><div class="ttname"><a href="net_8h.html#abb358e6d9aa1383e5196cb61f9357265">DEFAULT_MISBEHAVING_BANTIME</a></div><div class="ttdeci">static const unsigned int DEFAULT_MISBEHAVING_BANTIME</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00092">net.h:92</a></div></div>
<div class="ttc" id="classCNode_html_a66aeed3b6534635d031dff3eee9538de"><div class="ttname"><a href="classCNode.html#a66aeed3b6534635d031dff3eee9538de">CNode::cs_filter</a></div><div class="ttdeci">CCriticalSection cs_filter</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00715">net.h:715</a></div></div>
<div class="ttc" id="structCNodeSignals_html_adbe101522cf1fd496a8fdf2667744f0f"><div class="ttname"><a href="structCNodeSignals.html#adbe101522cf1fd496a8fdf2667744f0f">CNodeSignals::ProcessMessages</a></div><div class="ttdeci">boost::signals2::signal&lt; bool(CNode *, CConnman &amp;, std::atomic&lt; bool &gt; &amp;), CombinerAll &gt; ProcessMessages</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00533">net.h:533</a></div></div>
<div class="ttc" id="structCConnman_1_1ListenSocket_html"><div class="ttname"><a href="structCConnman_1_1ListenSocket.html">CConnman::ListenSocket</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00391">net.h:391</a></div></div>
<div class="ttc" id="timedata_8cpp_html_a09f81b9c7650f898cf3cf305b87547e6"><div class="ttname"><a href="timedata_8cpp.html#a09f81b9c7650f898cf3cf305b87547e6">GetAdjustedTime</a></div><div class="ttdeci">int64_t GetAdjustedTime()</div><div class="ttdef"><b>Definition:</b> <a href="timedata_8cpp_source.html#l00033">timedata.cpp:33</a></div></div>
<div class="ttc" id="net_8h_html_a954d746a58632565552615fd0a4ee660"><div class="ttname"><a href="net_8h.html#a954d746a58632565552615fd0a4ee660">NodeId</a></div><div class="ttdeci">int NodeId</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00094">net.h:94</a></div></div>
<div class="ttc" id="classCConnman_html_aa7c6970ed98a4a7bafbc071d24897d13"><div class="ttname"><a href="classCConnman.html#aa7c6970ed98a4a7bafbc071d24897d13">CConnman::ThreadDNSAddressSeed</a></div><div class="ttdeci">void ThreadDNSAddressSeed()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01522">net.cpp:1522</a></div></div>
<div class="ttc" id="classCConnman_html_ab1cf2be67b3e98527c87e6d5261d267e"><div class="ttname"><a href="classCConnman.html#ab1cf2be67b3e98527c87e6d5261d267e">CConnman::GetMaxOutboundTimeLeftInCycle</a></div><div class="ttdeci">uint64_t GetMaxOutboundTimeLeftInCycle()</div><div class="ttdoc">response the time in second left in the current max outbound cycle </div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02580">net.cpp:2580</a></div></div>
<div class="ttc" id="classCNode_html_a597b41bd64e2ac9391b7211e65aeb52a"><div class="ttname"><a href="classCNode.html#a597b41bd64e2ac9391b7211e65aeb52a">CNode::nStartingHeight</a></div><div class="ttdeci">int nStartingHeight</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00729">net.h:729</a></div></div>
<div class="ttc" id="netbase_8cpp_html_a56a2f4bcb9fb77b5efe358f804f642cc"><div class="ttname"><a href="netbase_8cpp.html#a56a2f4bcb9fb77b5efe358f804f642cc">Lookup</a></div><div class="ttdeci">bool Lookup(const char *pszName, std::vector&lt; CService &gt; &amp;vAddr, int portDefault, bool fAllowLookup, unsigned int nMaxSolutions)</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00200">netbase.cpp:200</a></div></div>
<div class="ttc" id="classCNetAddr_html_a4e3b2fea2a6151c76684b3812df4a5c3"><div class="ttname"><a href="classCNetAddr.html#a4e3b2fea2a6151c76684b3812df4a5c3">CNetAddr::IsRoutable</a></div><div class="ttdeci">bool IsRoutable() const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00222">netaddress.cpp:222</a></div></div>
<div class="ttc" id="classCBloomFilter_html_aec420a9b66ab133090c2b4b8ed286f79"><div class="ttname"><a href="classCBloomFilter.html#aec420a9b66ab133090c2b4b8ed286f79">CBloomFilter::IsRelevantAndUpdate</a></div><div class="ttdeci">bool IsRelevantAndUpdate(const CTransaction &amp;tx)</div><div class="ttdoc">Also adds any outputs which match the filter to the filter (to match their spending txes) ...</div><div class="ttdef"><b>Definition:</b> <a href="bloom_8cpp_source.html#l00136">bloom.cpp:136</a></div></div>
<div class="ttc" id="privatesend_8h_html"><div class="ttname"><a href="privatesend_8h.html">privatesend.h</a></div></div>
<div class="ttc" id="classCConnman_html_a82a08ed68d1c70aab8d31e6af59523cd"><div class="ttname"><a href="classCConnman.html#a82a08ed68d1c70aab8d31e6af59523cd">CConnman::GetSendBufferSize</a></div><div class="ttdeci">unsigned int GetSendBufferSize() const</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02663">net.cpp:2663</a></div></div>
<div class="ttc" id="protocol_8h_html_a16af7b253440dadd46a80a4b9fddba4da802e4d970385efb01469f48db2cf1e06"><div class="ttname"><a href="protocol_8h.html#a16af7b253440dadd46a80a4b9fddba4da802e4d970385efb01469f48db2cf1e06">MSG_TXLOCK_REQUEST</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00350">protocol.h:350</a></div></div>
<div class="ttc" id="classCNode_html_a2fb06d8be1f078b8796dc5098f114d38"><div class="ttname"><a href="classCNode.html#a2fb06d8be1f078b8796dc5098f114d38">CNode::mapRecvBytesPerMsgCmd</a></div><div class="ttdeci">mapMsgCmdSize mapRecvBytesPerMsgCmd</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00725">net.h:725</a></div></div>
<div class="ttc" id="classCConnman_html_aa014a4c7bbfc843aa4fff786a2aa8c96"><div class="ttname"><a href="classCConnman.html#aa014a4c7bbfc843aa4fff786a2aa8c96">CConnman::IsBanned</a></div><div class="ttdeci">bool IsBanned(CNetAddr ip)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00484">net.cpp:484</a></div></div>
<div class="ttc" id="classCConnman_html_a0912548f2db81fc15f291ce42ac50f0e"><div class="ttname"><a href="classCConnman.html#a0912548f2db81fc15f291ce42ac50f0e">CConnman::threadMessageHandler</a></div><div class="ttdeci">std::thread threadMessageHandler</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00507">net.h:507</a></div></div>
<div class="ttc" id="structCConnman_1_1Options_html_ab6e4a5465dcc41b7ba131ce04fb35ac3"><div class="ttname"><a href="structCConnman_1_1Options.html#ab6e4a5465dcc41b7ba131ce04fb35ac3">CConnman::Options::nSendBufferMaxSize</a></div><div class="ttdeci">unsigned int nSendBufferMaxSize</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00128">net.h:128</a></div></div>
<div class="ttc" id="classCConnman_html_a7ffb96b5277edc1e41cb705a5cbef72e"><div class="ttname"><a href="classCConnman.html#a7ffb96b5277edc1e41cb705a5cbef72e">CConnman::FindNode</a></div><div class="ttdeci">CNode * FindNode(const CNetAddr &amp;ip)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00301">net.cpp:301</a></div></div>
<div class="ttc" id="consensus_8h_html"><div class="ttname"><a href="consensus_8h.html">consensus.h</a></div></div>
<div class="ttc" id="net_8cpp_html_a5067f8b9215406011fa3461be92d819c"><div class="ttname"><a href="net_8cpp.html#a5067f8b9215406011fa3461be92d819c">fListen</a></div><div class="ttdeci">bool fListen</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00077">net.cpp:77</a></div></div>
<div class="ttc" id="classCMessageHeader_html_ab1cedd864043d80317912c5e225f342aa73cc507b1a2c32fba10305201e40f2b3"><div class="ttname"><a href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aa73cc507b1a2c32fba10305201e40f2b3">CMessageHeader::MESSAGE_SIZE_OFFSET</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00058">protocol.h:58</a></div></div>
<div class="ttc" id="classCInv_html"><div class="ttname"><a href="classCInv.html">CInv</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00314">protocol.h:314</a></div></div>
<div class="ttc" id="classCService_html"><div class="ttname"><a href="classCService.html">CService</a></div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8h_source.html#l00132">netaddress.h:132</a></div></div>
<div class="ttc" id="namespacerpc-tests_html_a5634cc986fc764eff8c617f53bf2e8dc"><div class="ttname"><a href="namespacerpc-tests.html#a5634cc986fc764eff8c617f53bf2e8dc">rpc-tests.p</a></div><div class="ttdeci">p</div><div class="ttdef"><b>Definition:</b> <a href="rpc-tests_8py_source.html#l00049">rpc-tests.py:49</a></div></div>
<div class="ttc" id="classCNetMessage_html_ae7215dca62862a3688f7eeb94646c377"><div class="ttname"><a href="classCNetMessage.html#ae7215dca62862a3688f7eeb94646c377">CNetMessage::hdr</a></div><div class="ttdeci">CMessageHeader hdr</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00626">net.h:626</a></div></div>
<div class="ttc" id="net_8cpp_html_a8316da05a5f15022dce5d0c2f82001fc"><div class="ttname"><a href="net_8cpp.html#a8316da05a5f15022dce5d0c2f82001fc">Discover</a></div><div class="ttdeci">void Discover(boost::thread_group &amp;threadGroup)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02062">net.cpp:2062</a></div></div>
<div class="ttc" id="random_8cpp_html_ada0c29949c4d1ac0cc027d93c4771423"><div class="ttname"><a href="random_8cpp.html#ada0c29949c4d1ac0cc027d93c4771423">GetRandBytes</a></div><div class="ttdeci">void GetRandBytes(unsigned char *buf, int num)</div><div class="ttdef"><b>Definition:</b> <a href="random_8cpp_source.html#l00086">random.cpp:86</a></div></div>
<div class="ttc" id="structCConnman_1_1Options_html_a83e2addcfd43683ff69eef0d61c38135"><div class="ttname"><a href="structCConnman_1_1Options.html#a83e2addcfd43683ff69eef0d61c38135">CConnman::Options::nMaxConnections</a></div><div class="ttdeci">int nMaxConnections</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00123">net.h:123</a></div></div>
<div class="ttc" id="common_8h_html"><div class="ttname"><a href="common_8h.html">common.h</a></div></div>
<div class="ttc" id="classCConnman_html_afe4088d5d272b05197b0c2cfeb9bc50b"><div class="ttname"><a href="classCConnman.html#afe4088d5d272b05197b0c2cfeb9bc50b">CConnman::IsWhitelistedRange</a></div><div class="ttdeci">bool IsWhitelistedRange(const CNetAddr &amp;addr)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00619">net.cpp:619</a></div></div>
<div class="ttc" id="classCNodeStats_html_ad2bceab1a335d59f42af37178b72fee7"><div class="ttname"><a href="classCNodeStats.html#ad2bceab1a335d59f42af37178b72fee7">CNodeStats::nodeid</a></div><div class="ttdeci">NodeId nodeid</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00594">net.h:594</a></div></div>
<div class="ttc" id="netbase_8cpp_html_a851a9917fb3475698f6632cfee0b4e23"><div class="ttname"><a href="netbase_8cpp.html#a851a9917fb3475698f6632cfee0b4e23">InterruptSocks5</a></div><div class="ttdeci">void InterruptSocks5(bool interrupt)</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00753">netbase.cpp:753</a></div></div>
<div class="ttc" id="classCNode_html_a4bb25f8bdeeaff5e8cb08abc97bbc44d"><div class="ttname"><a href="classCNode.html#a4bb25f8bdeeaff5e8cb08abc97bbc44d">CNode::grantOutbound</a></div><div class="ttdeci">CSemaphoreGrant grantOutbound</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00713">net.h:713</a></div></div>
<div class="ttc" id="masternode-sync_8h_html"><div class="ttname"><a href="masternode-sync_8h.html">masternode-sync.h</a></div></div>
<div class="ttc" id="net_8cpp_html_ae560d3fdf794873af9a1212644985fdd"><div class="ttname"><a href="net_8cpp.html#ae560d3fdf794873af9a1212644985fdd">instance_of_cnetcleanup</a></div><div class="ttdeci">class CNetCleanup instance_of_cnetcleanup</div></div>
<div class="ttc" id="structCConnman_1_1Options_html_aac4a45ec513fe972d3060f93c92e951f"><div class="ttname"><a href="structCConnman_1_1Options.html#aac4a45ec513fe972d3060f93c92e951f">CConnman::Options::nRelevantServices</a></div><div class="ttdeci">ServiceFlags nRelevantServices</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00122">net.h:122</a></div></div>
<div class="ttc" id="classCInstantSend_html_ae918618de5c9cc14d15188d067274186"><div class="ttname"><a href="classCInstantSend.html#ae918618de5c9cc14d15188d067274186">CInstantSend::HasTxLockRequest</a></div><div class="ttdeci">bool HasTxLockRequest(const uint256 &amp;txHash)</div><div class="ttdef"><b>Definition:</b> <a href="instantx_8cpp_source.html#l00730">instantx.cpp:730</a></div></div>
<div class="ttc" id="classCNode_html_a7593dfbd76c34a81169e3fb2aa0e0cf7"><div class="ttname"><a href="classCNode.html#a7593dfbd76c34a81169e3fb2aa0e0cf7">CNode::mapAskFor</a></div><div class="ttdeci">std::multimap&lt; int64_t, CInv &gt; mapAskFor</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00744">net.h:744</a></div></div>
<div class="ttc" id="ui__interface_8h_html"><div class="ttname"><a href="ui__interface_8h.html">ui_interface.h</a></div></div>
<div class="ttc" id="classCNode_html_a89226be680d821f4eef8fa391f4b4b6a"><div class="ttname"><a href="classCNode.html#a89226be680d821f4eef8fa391f4b4b6a">CNode::nNextInvSend</a></div><div class="ttdeci">int64_t nNextInvSend</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00745">net.h:745</a></div></div>
<div class="ttc" id="classCConnman_html_a4d51a2b0b901b8538ed7cf6a8df7a3ef"><div class="ttname"><a href="classCConnman.html#a4d51a2b0b901b8538ed7cf6a8df7a3ef">CConnman::Interrupt</a></div><div class="ttdeci">void Interrupt()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02290">net.cpp:2290</a></div></div>
<div class="ttc" id="classCConnman_html_a78c7481e9b2575bb1fb37078e28a1c6aa03265dbe8e18aa30dd559b9fa18a8acb"><div class="ttname"><a href="classCConnman.html#a78c7481e9b2575bb1fb37078e28a1c6aa03265dbe8e18aa30dd559b9fa18a8acb">CConnman::CONNECTIONS_IN</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00114">net.h:114</a></div></div>
<div class="ttc" id="util_8cpp_html_a24f685720bf40370e5bd2a192ad50cd8"><div class="ttname"><a href="util_8cpp.html#a24f685720bf40370e5bd2a192ad50cd8">GetArg</a></div><div class="ttdeci">std::string GetArg(const std::string &amp;strArg, const std::string &amp;strDefault)</div><div class="ttdef"><b>Definition:</b> <a href="util_8cpp_source.html#l00441">util.cpp:441</a></div></div>
<div class="ttc" id="zeroafterfree_8h_html_a77935f92ff5ba1d71d692166f6ce0c1b"><div class="ttname"><a href="zeroafterfree_8h.html#a77935f92ff5ba1d71d692166f6ce0c1b">CSerializeData</a></div><div class="ttdeci">std::vector&lt; char, zero_after_free_allocator&lt; char &gt; &gt; CSerializeData</div><div class="ttdef"><b>Definition:</b> <a href="zeroafterfree_8h_source.html#l00046">zeroafterfree.h:46</a></div></div>
<div class="ttc" id="classCSemaphore_html_af6a956f6c191e824485fd3af6db39318"><div class="ttname"><a href="classCSemaphore.html#af6a956f6c191e824485fd3af6db39318">CSemaphore::post</a></div><div class="ttdeci">void post()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00212">sync.h:212</a></div></div>
<div class="ttc" id="classCInstantSend_html_a12b011c3b48d3a3d9a0e71a9e5ed164d"><div class="ttname"><a href="classCInstantSend.html#a12b011c3b48d3a3d9a0e71a9e5ed164d">CInstantSend::GetTxLockRequest</a></div><div class="ttdeci">bool GetTxLockRequest(const uint256 &amp;txHash, CTxLockRequest &amp;txLockRequestRet)</div><div class="ttdef"><b>Definition:</b> <a href="instantx_8cpp_source.html#l00736">instantx.cpp:736</a></div></div>
<div class="ttc" id="dash-config_8h_html"><div class="ttname"><a href="dash-config_8h.html">dash-config.h</a></div></div>
<div class="ttc" id="classCNode_html_a5ab6745f890f7d018b8ab278a4aaf039"><div class="ttname"><a href="classCNode.html#a5ab6745f890f7d018b8ab278a4aaf039">CNode::nLastWarningTime</a></div><div class="ttdeci">int64_t nLastWarningTime</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00687">net.h:687</a></div></div>
<div class="ttc" id="classCConnman_html_a19b622717b482d588b2e9510a1163d35"><div class="ttname"><a href="classCConnman.html#a19b622717b482d588b2e9510a1163d35">CConnman::cs_vNodes</a></div><div class="ttdeci">CCriticalSection cs_vNodes</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00476">net.h:476</a></div></div>
<div class="ttc" id="classCNodeStats_html"><div class="ttname"><a href="classCNodeStats.html">CNodeStats</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00591">net.h:591</a></div></div>
<div class="ttc" id="netbase_8cpp_html_a8ddb7d8d6e5b5cfabfdeea132f556977"><div class="ttname"><a href="netbase_8cpp.html#a8ddb7d8d6e5b5cfabfdeea132f556977">NetworkErrorString</a></div><div class="ttdeci">std::string NetworkErrorString(int err)</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00694">netbase.cpp:694</a></div></div>
<div class="ttc" id="compat_8h_html_a7ce1c171e08d68442124bf6189f8aec5"><div class="ttname"><a href="compat_8h.html#a7ce1c171e08d68442124bf6189f8aec5">WSAEMSGSIZE</a></div><div class="ttdeci">#define WSAEMSGSIZE</div><div class="ttdef"><b>Definition:</b> <a href="compat_8h_source.html#l00058">compat.h:58</a></div></div>
<div class="ttc" id="classCDarksendBroadcastTx_html"><div class="ttname"><a href="classCDarksendBroadcastTx.html">CDarksendBroadcastTx</a></div><div class="ttdef"><b>Definition:</b> <a href="privatesend_8h_source.html#l00219">privatesend.h:219</a></div></div>
<div class="ttc" id="classCNode_html_a3155cd313d85ec3ff691f8259a5f5345"><div class="ttname"><a href="classCNode.html#a3155cd313d85ec3ff691f8259a5f5345">CNode::addrName</a></div><div class="ttdeci">std::string addrName</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00689">net.h:689</a></div></div>
<div class="ttc" id="utiltime_8cpp_html_a46fac5fba8ba905b5f9acb364f5d8c6f"><div class="ttname"><a href="utiltime_8cpp.html#a46fac5fba8ba905b5f9acb364f5d8c6f">GetTime</a></div><div class="ttdeci">int64_t GetTime()</div><div class="ttdoc">For unit testing. </div><div class="ttdef"><b>Definition:</b> <a href="utiltime_8cpp_source.html#l00020">utiltime.cpp:20</a></div></div>
<div class="ttc" id="classCMasternodeMan_html_ac3691f1c70af48026fc9c3bbb69197ee"><div class="ttname"><a href="classCMasternodeMan.html#ac3691f1c70af48026fc9c3bbb69197ee">CMasternodeMan::PopScheduledMnbRequestConnection</a></div><div class="ttdeci">std::pair&lt; CService, std::set&lt; uint256 &gt; &gt; PopScheduledMnbRequestConnection()</div><div class="ttdef"><b>Definition:</b> <a href="masternodeman_8cpp_source.html#l00743">masternodeman.cpp:743</a></div></div>
<div class="ttc" id="classCConnman_html_ab94bcc3fb7745cd4aee32c4b8394bed1"><div class="ttname"><a href="classCConnman.html#ab94bcc3fb7745cd4aee32c4b8394bed1">CConnman::threadOpenAddedConnections</a></div><div class="ttdeci">std::thread threadOpenAddedConnections</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00504">net.h:504</a></div></div>
<div class="ttc" id="classCConnman_html_aecc69dfb264443440fe352450c3f6165"><div class="ttname"><a href="classCConnman.html#aecc69dfb264443440fe352450c3f6165">CConnman::threadMnbRequestConnections</a></div><div class="ttdeci">std::thread threadMnbRequestConnections</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00506">net.h:506</a></div></div>
<div class="ttc" id="classCAddrDB_html_aaec90dba59cd69a2f25bc5630a1dde39"><div class="ttname"><a href="classCAddrDB.html#aaec90dba59cd69a2f25bc5630a1dde39">CAddrDB::Write</a></div><div class="ttdeci">bool Write(const CAddrMan &amp;addr)</div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8cpp_source.html#l00121">addrdb.cpp:121</a></div></div>
<div class="ttc" id="net_8h_html_abc5c98fcc1211af2b80116dd6e0a035da85f937846a9820dce1ac928efee52a91"><div class="ttname"><a href="net_8h.html#abc5c98fcc1211af2b80116dd6e0a035da85f937846a9820dce1ac928efee52a91">LOCAL_MANUAL</a></div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00549">net.h:549</a></div></div>
<div class="ttc" id="netbase_8cpp_html_a3cdc8ba9f8d72752ff5cdd1e7407cdef"><div class="ttname"><a href="netbase_8cpp.html#a3cdc8ba9f8d72752ff5cdd1e7407cdef">LookupHost</a></div><div class="ttdeci">bool LookupHost(const char *pszName, std::vector&lt; CNetAddr &gt; &amp;vIP, unsigned int nMaxSolutions, bool fAllowLookup)</div><div class="ttdef"><b>Definition:</b> <a href="netbase_8cpp_source.html#l00177">netbase.cpp:177</a></div></div>
<div class="ttc" id="classCConnman_html_ac88ba00355f9d1870e216075a8f2c85c"><div class="ttname"><a href="classCConnman.html#ac88ba00355f9d1870e216075a8f2c85c">CConnman::nBestHeight</a></div><div class="ttdeci">std::atomic&lt; int &gt; nBestHeight</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00490">net.h:490</a></div></div>
<div class="ttc" id="classCThreadInterrupt_html_a6118393076e75866a688bb64ef4a1e63"><div class="ttname"><a href="classCThreadInterrupt.html#a6118393076e75866a688bb64ef4a1e63">CThreadInterrupt::sleep_for</a></div><div class="ttdeci">bool sleep_for(std::chrono::milliseconds rel_time)</div><div class="ttdef"><b>Definition:</b> <a href="threadinterrupt_8cpp_source.html#l00027">threadinterrupt.cpp:27</a></div></div>
<div class="ttc" id="classCConnman_html_a3de904541eed55727886098885fc5c3b"><div class="ttname"><a href="classCConnman.html#a3de904541eed55727886098885fc5c3b">CConnman::GetNewNodeId</a></div><div class="ttdeci">NodeId GetNewNodeId()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02151">net.cpp:2151</a></div></div>
<div class="ttc" id="net_8h_html_a48948c1d61d3fb24fbbb010eee32e4c4"><div class="ttname"><a href="net_8h.html#a48948c1d61d3fb24fbbb010eee32e4c4">WARNING_INTERVAL</a></div><div class="ttdeci">static const int WARNING_INTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00051">net.h:51</a></div></div>
<div class="ttc" id="classCNetAddr_html_ad0162f2629f552a65acf934e1629c1db"><div class="ttname"><a href="classCNetAddr.html#ad0162f2629f552a65acf934e1629c1db">CNetAddr::GetNetwork</a></div><div class="ttdeci">enum Network GetNetwork() const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00227">netaddress.cpp:227</a></div></div>
<div class="ttc" id="classCConnman_html_afaf3119a1d1212256aa6f4b5763c29ca"><div class="ttname"><a href="classCConnman.html#afaf3119a1d1212256aa6f4b5763c29ca">CConnman::AddOneShot</a></div><div class="ttdeci">void AddOneShot(const std::string &amp;strDest)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00094">net.cpp:94</a></div></div>
<div class="ttc" id="classCConnman_html_afe88b51d85f5b77fd38cd0be1d177891"><div class="ttname"><a href="classCConnman.html#afe88b51d85f5b77fd38cd0be1d177891">CConnman::AcceptConnection</a></div><div class="ttdeci">void AcceptConnection(const ListenSocket &amp;hListenSocket)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01023">net.cpp:1023</a></div></div>
<div class="ttc" id="classCDataStream_html_add30f866dd928fc28c47fe79a0a6723a"><div class="ttname"><a href="classCDataStream.html#add30f866dd928fc28c47fe79a0a6723a">CDataStream::size</a></div><div class="ttdeci">size_type size() const</div><div class="ttdef"><b>Definition:</b> <a href="streams_8h_source.html#l00122">streams.h:122</a></div></div>
<div class="ttc" id="classCBanEntry_html"><div class="ttname"><a href="classCBanEntry.html">CBanEntry</a></div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8h_source.html#l00026">addrdb.h:26</a></div></div>
<div class="ttc" id="classCConnman_html_a1e4b04dc4c4502adbb735257cf757a66"><div class="ttname"><a href="classCConnman.html#a1e4b04dc4c4502adbb735257cf757a66">CConnman::AttemptToEvictConnection</a></div><div class="ttdeci">bool AttemptToEvictConnection()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00924">net.cpp:924</a></div></div>
<div class="ttc" id="classCConnman_html_a376121b9eccd7ebbe19d3c3c058146d4"><div class="ttname"><a href="classCConnman.html#a376121b9eccd7ebbe19d3c3c058146d4">CConnman::cs_totalBytesRecv</a></div><div class="ttdeci">CCriticalSection cs_totalBytesRecv</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00444">net.h:444</a></div></div>
<div class="ttc" id="namespacezmq__sub_html_a84be4ecf90bb1177eb91ebfd0bc46e05"><div class="ttname"><a href="namespacezmq__sub.html#a84be4ecf90bb1177eb91ebfd0bc46e05">zmq_sub.port</a></div><div class="ttdeci">int port</div><div class="ttdef"><b>Definition:</b> <a href="zmq__sub_8py_source.html#l00008">zmq_sub.py:8</a></div></div>
<div class="ttc" id="classCService_html_ac4c6d655fab3af40937f0b0c65581745"><div class="ttname"><a href="classCService.html#ac4c6d655fab3af40937f0b0c65581745">CService::GetSockAddr</a></div><div class="ttdeci">bool GetSockAddr(struct sockaddr *paddr, socklen_t *addrlen) const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00515">netaddress.cpp:515</a></div></div>
<div class="ttc" id="classCConnman_html_a4ba34cd3557ab0ba1cfcbe7c18bf1199"><div class="ttname"><a href="classCConnman.html#a4ba34cd3557ab0ba1cfcbe7c18bf1199">CConnman::GetAddresses</a></div><div class="ttdeci">std::vector&lt; CAddress &gt; GetAddresses()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02400">net.cpp:2400</a></div></div>
<div class="ttc" id="classCConnman_html_ac4c8cf5142f88565e789f3b173d89b3e"><div class="ttname"><a href="classCConnman.html#ac4c8cf5142f88565e789f3b173d89b3e">CConnman::ThreadOpenConnections</a></div><div class="ttdeci">void ThreadOpenConnections()</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l01620">net.cpp:1620</a></div></div>
<div class="ttc" id="classCNetMessage_html_a3e58f5f29b23d1377f8fd15fc75c78ac"><div class="ttname"><a href="classCNetMessage.html#a3e58f5f29b23d1377f8fd15fc75c78ac">CNetMessage::readHeader</a></div><div class="ttdeci">int readHeader(const char *pch, unsigned int nBytes)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00755">net.cpp:755</a></div></div>
<div class="ttc" id="classCMessageHeader_html_ab1cedd864043d80317912c5e225f342aac92b66287a05d5c96bf494ff5a48e726"><div class="ttname"><a href="classCMessageHeader.html#ab1cedd864043d80317912c5e225f342aac92b66287a05d5c96bf494ff5a48e726">CMessageHeader::CHECKSUM_SIZE</a></div><div class="ttdef"><b>Definition:</b> <a href="protocol_8h_source.html#l00056">protocol.h:56</a></div></div>
<div class="ttc" id="classCConnman_html_a81ee60dee3278cf33319ab0c02c239bd"><div class="ttname"><a href="classCConnman.html#a81ee60dee3278cf33319ab0c02c239bd">CConnman::AllNodes</a></div><div class="ttdeci">static constexpr const CAllNodes AllNodes</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00160">net.h:160</a></div></div>
<div class="ttc" id="classCMasternodeSync_html_ab1f58bda356a30a15ae1733e238f188f"><div class="ttname"><a href="classCMasternodeSync.html#ab1f58bda356a30a15ae1733e238f188f">CMasternodeSync::IsSynced</a></div><div class="ttdeci">bool IsSynced()</div><div class="ttdef"><b>Definition:</b> <a href="masternode-sync_8h_source.html#l00063">masternode-sync.h:63</a></div></div>
<div class="ttc" id="classCNode_html_a2bb91c9968a9f855c05b1121100a8797"><div class="ttname"><a href="classCNode.html#a2bb91c9968a9f855c05b1121100a8797">CNode::fOneShot</a></div><div class="ttdeci">bool fOneShot</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00700">net.h:700</a></div></div>
<div class="ttc" id="util_8cpp_html_a34d23466f937db99d45620bc7ea5d2fb"><div class="ttname"><a href="util_8cpp.html#a34d23466f937db99d45620bc7ea5d2fb">mapMultiArgs</a></div><div class="ttdeci">map&lt; string, vector&lt; string &gt; &gt; mapMultiArgs</div><div class="ttdef"><b>Definition:</b> <a href="util_8cpp_source.html#l00123">util.cpp:123</a></div></div>
<div class="ttc" id="classCSubNet_html_af84fa02ebca222739c55e9d2cd7d38a3"><div class="ttname"><a href="classCSubNet.html#af84fa02ebca222739c55e9d2cd7d38a3">CSubNet::Match</a></div><div class="ttdeci">bool Match(const CNetAddr &amp;addr) const</div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8cpp_source.html#l00634">netaddress.cpp:634</a></div></div>
<div class="ttc" id="classCConnman_html_a9a7c3cfda53ccb9b9a33f4291043b47b"><div class="ttname"><a href="classCConnman.html#a9a7c3cfda53ccb9b9a33f4291043b47b">CConnman::SetNetworkActive</a></div><div class="ttdeci">void SetNetworkActive(bool active)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02113">net.cpp:2113</a></div></div>
<div class="ttc" id="classCNode_html_a51e1156224dc77de9c0812f599f1bff4"><div class="ttname"><a href="classCNode.html#a51e1156224dc77de9c0812f599f1bff4">CNode::mapSendBytesPerMsgCmd</a></div><div class="ttdeci">mapMsgCmdSize mapSendBytesPerMsgCmd</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00724">net.h:724</a></div></div>
<div class="ttc" id="transaction_8h_html"><div class="ttname"><a href="transaction_8h.html">transaction.h</a></div></div>
<div class="ttc" id="classCClientUIInterface_html_addd7f774fd2ffc49b3c1b903f12aa4a0"><div class="ttname"><a href="classCClientUIInterface.html#addd7f774fd2ffc49b3c1b903f12aa4a0">CClientUIInterface::NotifyNetworkActiveChanged</a></div><div class="ttdeci">boost::signals2::signal&lt; void(bool networkActive)&gt; NotifyNetworkActiveChanged</div><div class="ttdef"><b>Definition:</b> <a href="ui__interface_8h_source.html#l00089">ui_interface.h:89</a></div></div>
<div class="ttc" id="classCNode_html_a090bda86de6b84c3db83e1f029d4f453"><div class="ttname"><a href="classCNode.html#a090bda86de6b84c3db83e1f029d4f453">CNode::nSendOffset</a></div><div class="ttdeci">size_t nSendOffset</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00670">net.h:670</a></div></div>
<div class="ttc" id="net_8cpp_html_ae96c8b921771b8ffe774146180dcdfd0"><div class="ttname"><a href="net_8cpp.html#ae96c8b921771b8ffe774146180dcdfd0">ReverseCompareNodeMinPingTime</a></div><div class="ttdeci">static bool ReverseCompareNodeMinPingTime(const NodeEvictionCandidate &amp;a, const NodeEvictionCandidate &amp;b)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00884">net.cpp:884</a></div></div>
<div class="ttc" id="net_8h_html_af677dfc85dddc429fe0303f338878ec0"><div class="ttname"><a href="net_8h.html#af677dfc85dddc429fe0303f338878ec0">MAX_INV_SZ</a></div><div class="ttdeci">static const unsigned int MAX_INV_SZ</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00055">net.h:55</a></div></div>
<div class="ttc" id="net_8cpp_html_a0df0c10706c3d7255fd1d57a899ad9f2"><div class="ttname"><a href="net_8cpp.html#a0df0c10706c3d7255fd1d57a899ad9f2">mapAlreadyAskedFor</a></div><div class="ttdeci">limitedmap&lt; uint256, int64_t &gt; mapAlreadyAskedFor(MAX_INV_SZ)</div></div>
<div class="ttc" id="classCAddrInfo_html"><div class="ttname"><a href="classCAddrInfo.html">CAddrInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00023">addrman.h:23</a></div></div>
<div class="ttc" id="classCSHA256_html"><div class="ttname"><a href="classCSHA256.html">CSHA256</a></div><div class="ttdef"><b>Definition:</b> <a href="sha256_8h_source.html#l00012">sha256.h:12</a></div></div>
<div class="ttc" id="classCNetMessage_html_a1a25c16099d01362e1663390a2e06d1a"><div class="ttname"><a href="classCNetMessage.html#a1a25c16099d01362e1663390a2e06d1a">CNetMessage::vRecv</a></div><div class="ttdeci">CDataStream vRecv</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00629">net.h:629</a></div></div>
<div class="ttc" id="classCNode_html_a06950a5ce265a1d4df1aad7f28e6fde8"><div class="ttname"><a href="classCNode.html#a06950a5ce265a1d4df1aad7f28e6fde8">CNode::PushAddress</a></div><div class="ttdeci">void PushAddress(const CAddress &amp;addr)</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00843">net.h:843</a></div></div>
<div class="ttc" id="classCNode_html_abb39393ef08cb5668ded6cb14cdbc147"><div class="ttname"><a href="classCNode.html#abb39393ef08cb5668ded6cb14cdbc147">CNode::nTimeConnected</a></div><div class="ttdeci">int64_t nTimeConnected</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00685">net.h:685</a></div></div>
<div class="ttc" id="classCNode_html_af452f44f41e2e583e01a9b730e475c81"><div class="ttname"><a href="classCNode.html#af452f44f41e2e583e01a9b730e475c81">CNode::nLocalHostNonce</a></div><div class="ttdeci">uint64_t nLocalHostNonce</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00783">net.h:783</a></div></div>
<div class="ttc" id="classCAddrMan_html_afcddc2573121065177dc981cea710789"><div class="ttname"><a href="classCAddrMan.html#afcddc2573121065177dc981cea710789">CAddrMan::Attempt</a></div><div class="ttdeci">void Attempt(const CService &amp;addr, int64_t nTime=GetAdjustedTime())</div><div class="ttdoc">Mark an entry as connection attempted to. </div><div class="ttdef"><b>Definition:</b> <a href="addrman_8h_source.html#l00529">addrman.h:529</a></div></div>
<div class="ttc" id="net_8cpp_html_a5e487e1c7c859212aa23f8707096a8a4"><div class="ttname"><a href="net_8cpp.html#a5e487e1c7c859212aa23f8707096a8a4">vfLimited</a></div><div class="ttdeci">static bool vfLimited[NET_MAX]</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00081">net.cpp:81</a></div></div>
<div class="ttc" id="classCNode_html_a0a55cea2748b1837610b2caed8069a90"><div class="ttname"><a href="classCNode.html#a0a55cea2748b1837610b2caed8069a90">CNode::SetSendVersion</a></div><div class="ttdeci">void SetSendVersion(int nVersionIn)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00728">net.cpp:728</a></div></div>
<div class="ttc" id="clientversion_8h_html"><div class="ttname"><a href="clientversion_8h.html">clientversion.h</a></div></div>
<div class="ttc" id="classCNode_html_a1a2342bb4914d738c14c04affbcdac27"><div class="ttname"><a href="classCNode.html#a1a2342bb4914d738c14c04affbcdac27">CNode::nServices</a></div><div class="ttdeci">ServiceFlags nServices</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00666">net.h:666</a></div></div>
<div class="ttc" id="classCConnman_html_a62a79bcc191112ab8ea87e860a16d2a2"><div class="ttname"><a href="classCConnman.html#a62a79bcc191112ab8ea87e860a16d2a2">CConnman::SocketSendData</a></div><div class="ttdeci">size_t SocketSendData(CNode *pnode)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00811">net.cpp:811</a></div></div>
<div class="ttc" id="classCConnman_html_a1c714c44a6c870c08deddb267eaccba1"><div class="ttname"><a href="classCConnman.html#a1c714c44a6c870c08deddb267eaccba1">CConnman::setBannedIsDirty</a></div><div class="ttdeci">bool setBannedIsDirty</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00467">net.h:467</a></div></div>
<div class="ttc" id="classCConnman_html_a6305756f9622612ff70f3453a385535e"><div class="ttname"><a href="classCConnman.html#a6305756f9622612ff70f3453a385535e">CConnman::nRelevantServices</a></div><div class="ttdeci">ServiceFlags nRelevantServices</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00483">net.h:483</a></div></div>
<div class="ttc" id="net_8cpp_html_a0cde2b3256757536c42c0bd3037847d1"><div class="ttname"><a href="net_8cpp.html#a0cde2b3256757536c42c0bd3037847d1">AdvertiseLocal</a></div><div class="ttdeci">void AdvertiseLocal(CNode *pnode)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00183">net.cpp:183</a></div></div>
<div class="ttc" id="classCConnman_html_ad38cc6cdc3b3767c2714452224895093"><div class="ttname"><a href="classCConnman.html#ad38cc6cdc3b3767c2714452224895093">CConnman::RecordBytesRecv</a></div><div class="ttdeci">void RecordBytesRecv(uint64_t bytes)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02535">net.cpp:2535</a></div></div>
<div class="ttc" id="classCPrivateSend_html_a36f23c902c9f5510a45ba39562bcd674"><div class="ttname"><a href="classCPrivateSend.html#a36f23c902c9f5510a45ba39562bcd674">CPrivateSend::GetDSTX</a></div><div class="ttdeci">static CDarksendBroadcastTx GetDSTX(const uint256 &amp;hash)</div><div class="ttdef"><b>Definition:</b> <a href="privatesend_8cpp_source.html#l00374">privatesend.cpp:374</a></div></div>
<div class="ttc" id="classCConnman_html_a7083075680ab1633003a4a5acb09b453"><div class="ttname"><a href="classCConnman.html#a7083075680ab1633003a4a5acb09b453">CConnman::PushMessage</a></div><div class="ttdeci">void PushMessage(CNode *pnode, const std::string &amp;sCommand, Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00199">net.h:199</a></div></div>
<div class="ttc" id="utilstrencodings_8cpp_html_a51f420f9333d2019332acb09dbd7524f"><div class="ttname"><a href="utilstrencodings_8cpp.html#a51f420f9333d2019332acb09dbd7524f">SanitizeString</a></div><div class="ttdeci">string SanitizeString(const string &amp;str, int rule)</div><div class="ttdef"><b>Definition:</b> <a href="utilstrencodings_8cpp_source.html#l00025">utilstrencodings.cpp:25</a></div></div>
<div class="ttc" id="classCConnman_html_a4628ea4ab0119c4a396cdae10bc7d06e"><div class="ttname"><a href="classCConnman.html#a4628ea4ab0119c4a396cdae10bc7d06e">CConnman::SetMaxOutboundTimeframe</a></div><div class="ttdeci">void SetMaxOutboundTimeframe(uint64_t timeframe)</div><div class="ttdoc">set the timeframe for the max outbound target </div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02594">net.cpp:2594</a></div></div>
<div class="ttc" id="net_8cpp_html_a3b026e51b0bac81a09fd11694d8a5674"><div class="ttname"><a href="net_8cpp.html#a3b026e51b0bac81a09fd11694d8a5674">g_signals</a></div><div class="ttdeci">static CNodeSignals g_signals</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00091">net.cpp:91</a></div></div>
<div class="ttc" id="classCNode_html_a0a2cdd01cb730536adf1780c3df66430"><div class="ttname"><a href="classCNode.html#a0a2cdd01cb730536adf1780c3df66430">CNode::nVersion</a></div><div class="ttdeci">std::atomic&lt; int &gt; nVersion</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00692">net.h:692</a></div></div>
<div class="ttc" id="net_8cpp_html_a96eb2fba6d80870802ac787b6ada4beb"><div class="ttname"><a href="net_8cpp.html#a96eb2fba6d80870802ac787b6ada4beb">IsLimited</a></div><div class="ttdeci">bool IsLimited(enum Network net)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00253">net.cpp:253</a></div></div>
<div class="ttc" id="util_8h_html_aad133bb6103b53cebf03fd01e2f11ba1"><div class="ttname"><a href="util_8h.html#aad133bb6103b53cebf03fd01e2f11ba1">_</a></div><div class="ttdeci">std::string _(const char *psz)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00084">util.h:84</a></div></div>
<div class="ttc" id="structCConnman_1_1Options_html_a4b779b0f0eba5f2cf82f431123466df5"><div class="ttname"><a href="structCConnman_1_1Options.html#a4b779b0f0eba5f2cf82f431123466df5">CConnman::Options::nBestHeight</a></div><div class="ttdeci">int nBestHeight</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00126">net.h:126</a></div></div>
<div class="ttc" id="util_8cpp_html_a0502b74b88db99500ee21dcb446311e5"><div class="ttname"><a href="util_8cpp.html#a0502b74b88db99500ee21dcb446311e5">mapArgs</a></div><div class="ttdeci">map&lt; string, string &gt; mapArgs</div><div class="ttdef"><b>Definition:</b> <a href="util_8cpp_source.html#l00122">util.cpp:122</a></div></div>
<div class="ttc" id="classCConnman_html_af4cd7fce69f5bf61701c3735ba3bec79"><div class="ttname"><a href="classCConnman.html#af4cd7fce69f5bf61701c3735ba3bec79">CConnman::AddNode</a></div><div class="ttdeci">bool AddNode(const std::string &amp;node)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l02405">net.cpp:2405</a></div></div>
<div class="ttc" id="net_8cpp_html_a16fa1bd4d34c4c29c90903fc3cdf7517"><div class="ttname"><a href="net_8cpp.html#a16fa1bd4d34c4c29c90903fc3cdf7517">IsLocal</a></div><div class="ttdeci">bool IsLocal(const CService &amp;addr)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00278">net.cpp:278</a></div></div>
<div class="ttc" id="classCNode_html_a656cd9e578e6e1ee07c8b7064302f789"><div class="ttname"><a href="classCNode.html#a656cd9e578e6e1ee07c8b7064302f789">CNode::vchKeyedNetGroup</a></div><div class="ttdeci">std::vector&lt; unsigned char &gt; vchKeyedNetGroup</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00769">net.h:769</a></div></div>
<div class="ttc" id="random_8cpp_html_a27d9149d522b1fa87d84e5e9ca902aef"><div class="ttname"><a href="random_8cpp.html#a27d9149d522b1fa87d84e5e9ca902aef">GetRand</a></div><div class="ttdeci">uint64_t GetRand(uint64_t nMax)</div><div class="ttdef"><b>Definition:</b> <a href="random_8cpp_source.html#l00094">random.cpp:94</a></div></div>
<div class="ttc" id="classCConnman_html_a0695d37447e19cfde25be7e9b7f13f67"><div class="ttname"><a href="classCConnman.html#a0695d37447e19cfde25be7e9b7f13f67">CConnman::SweepBanned</a></div><div class="ttdeci">void SweepBanned()</div><div class="ttdoc">clean unused entries (if bantime has expired) </div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00585">net.cpp:585</a></div></div>
<div class="ttc" id="classCConnman_html_a626cf5fd895a959c73f7b77acc1a18a8"><div class="ttname"><a href="classCConnman.html#a626cf5fd895a959c73f7b77acc1a18a8">CConnman::nMaxOutboundTimeframe</a></div><div class="ttdeci">uint64_t nMaxOutboundTimeframe</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00453">net.h:453</a></div></div>
<div class="ttc" id="classCBanEntry_html_a70899703ea4dcfe6056f4db8b7f77126"><div class="ttname"><a href="classCBanEntry.html#a70899703ea4dcfe6056f4db8b7f77126">CBanEntry::banReason</a></div><div class="ttdeci">uint8_t banReason</div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8h_source.html#l00033">addrdb.h:33</a></div></div>
<div class="ttc" id="classCNode_html_a2f7a99d038591b007d709a17cbdae3dd"><div class="ttname"><a href="classCNode.html#a2f7a99d038591b007d709a17cbdae3dd">CNode::vRecvMsg</a></div><div class="ttdeci">std::list&lt; CNetMessage &gt; vRecvMsg</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00787">net.h:787</a></div></div>
<div class="ttc" id="net_8cpp_html_a56c574c7d0575da90992b4d9459130d5"><div class="ttname"><a href="net_8cpp.html#a56c574c7d0575da90992b4d9459130d5">ReverseCompareNodeTimeConnected</a></div><div class="ttdeci">static bool ReverseCompareNodeTimeConnected(const NodeEvictionCandidate &amp;a, const NodeEvictionCandidate &amp;b)</div><div class="ttdef"><b>Definition:</b> <a href="net_8cpp_source.html#l00889">net.cpp:889</a></div></div>
<div class="ttc" id="netaddress_8h_html_acc9a38c714afe79b5035cb36f560dac3af66f60a80e2a5d99813c3f322cf8a6e1"><div class="ttname"><a href="netaddress_8h.html#acc9a38c714afe79b5035cb36f560dac3af66f60a80e2a5d99813c3f322cf8a6e1">NET_UNROUTABLE</a></div><div class="ttdef"><b>Definition:</b> <a href="netaddress_8h_source.html#l00021">netaddress.h:21</a></div></div>
<div class="ttc" id="classCNode_html_a81d6deb661c7386a453e0966d2dbc36f"><div class="ttname"><a href="classCNode.html#a81d6deb661c7386a453e0966d2dbc36f">CNode::cs_vProcessMsg</a></div><div class="ttdeci">CCriticalSection cs_vProcessMsg</div><div class="ttdef"><b>Definition:</b> <a href="net_8h_source.html#l00675">net.h:675</a></div></div>
<div class="ttc" id="classCBanEntry_html_ad055d0792f71b5da238c668ef0a27109"><div class="ttname"><a href="classCBanEntry.html#ad055d0792f71b5da238c668ef0a27109">CBanEntry::nBanUntil</a></div><div class="ttdeci">int64_t nBanUntil</div><div class="ttdef"><b>Definition:</b> <a href="addrdb_8h_source.html#l00032">addrdb.h:32</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="net_8cpp.html">net.cpp</a></li>
<li class="footer">Generated on Thu Dec 14 2017 13:15:03 for Dash Core by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.14 </li>
</ul>
</div>
</body>
</html>