user30181: In bitcoin's gossip network will there be a path from every node to every other node? It can certainly have different number of hops.
I have a private testnet in which I modified some source code. I get a graph like this
A->B->C 

So we have a path from A to C but not C to A. So when C mines a block, the information is remained with it and it does not send inv messages out. Not sure if I am wrong or this is expected?
Edit:
The only change I did is to make testnet work on my localhost. Removed the IsLocal() check from IsRoutable() and added my own hardcoded seeds.

user23123: The bitcoin network is only as connected as each node wants to be. The protocol is designed in such a way as to incentivize being connected to the network, so in practice, almost every full node is connected to a lot of other nodes and hence, there's at least a very good chance of a short path between any two nodes.
However, that's not to say that every node is connected. It is entirely possible to run a full node that's not connected, like you seem to have done. In your case, it seems C does not have any peers, so C's mined block won't get to anyone else.
Run this command to see which peers it has:
$ bitcoin-cli getpeerinfo

You'll want to add connections this way:
$ bitcoin-cli addnode <node ip and port> add


30181: <p>In bitcoin's gossip network will there be a path from every node to every other node? It can certainly have different number of hops.</p>

<p>I have a private testnet in which I modified some source code. I get a graph like this</p>

<pre><code>A-&gt;B-&gt;C 
</code></pre>

<p>So we have a path from A to C but not C to A. So when C mines a block, the information is remained with it and it does not send <em>inv</em> messages out. Not sure if I am wrong or this is expected?</p>

<p><strong>Edit:</strong></p>

<p>The only change I did is to make testnet work on my localhost. Removed the IsLocal() check from IsRoutable() and added my own hardcoded seeds.</p>
 23123: <p>The bitcoin network is only as connected as each node wants to be. The protocol is designed in such a way as to incentivize being connected to the network, so in practice, almost every full node is connected to a lot of other nodes and hence, there's at least a very good chance of a short path between any two nodes.</p>

<p>However, that's not to say that every node is connected. It is entirely possible to run a full node that's not connected, like you seem to have done. In your case, it seems C does not have any peers, so C's mined block won't get to anyone else.</p>

<p>Run this command to see which peers it has:</p>

<pre><code>$ bitcoin-cli getpeerinfo
</code></pre>

<p>You'll want to add connections this way:</p>

<pre><code>$ bitcoin-cli addnode &lt;node ip and port&gt; add
</code></pre>
