比特币源码解读十三

作者: ttblack | 来源:发表于2017-10-28 21:06 被阅读599次

我们现在通过对Appinit2的分析看到了很多比特币的核心内容,现在我们要看的是第十一步。也有非常核心的内容。我们先大概了解下这步的内容:Step 11: start node (启动节点)

节点启动

一。我们先看下CheckDiskSpace函数 ,在main.cpp中。

CheckDiskSpace

可以看到通过filesystem的space函数获取比特币的目录的硬盘空间,能过比较我们设置的最小值(nMinDiskSpace)进行的空间判断。这个最小值是50M。定义在main.h中。

要求最小硬盘空间

二。RandAddSeedPerfmon 

这个函数我们在《解读十》中有过介绍,这个函数就是用于生成种子私钥的。关于什么是种子私钥,在我以前的文章中都有过介绍,《解读十》中也有提及。

三,启动节点

连接到比特币网络

此函数的主要功能就是进行了本节点的网络发现,并进行连接,其中CNode类为节点类,定义在net.h中,这类包含了一个节点的所有信息。然后,调用Discover函数进行网络发现。

获取本机IP地址

这个函数让我们认识了在windows系统下和Linux系统下不同的获取本地IP地址的方式。其中在Windows系统中首先使用gethostname()函数先取得本机的主机名,然后调用LookupHost函数根据主机名获取本机的局部IP地址。在其他系统中可以直接使用getifaddrs()函数直接获取了本机IP地址,并且这个函数的参数就是直接存储地址信息的结构对象。这个结构对象是ifaddrs的指针。其结构定义为:

ifaddrs结构体

其实getifaddrs函数是创建了一个描述本机ip地址的链表,其中ifa_next指向链表的下一个成员;ifa_name是接口名称,以0结尾的字符串,比如eth0,lo;ifa_flags是接口的标识位(比如当IFF_BROADCAST或IFF_POINTOPOINT设置到此标识位时,影响联合体变量ifu_broadaddr存储广播地址或ifu_dstaddr记录点对点地址);ifa_netmask存储该接口的子网掩码;结构体变量存储广播地址或点对点地址(见括弧介绍ifa_flags);ifa_data存储了该接口协议族的特殊信息,它通常是NULL(一般不关注他)

我们接下来也看下是如何获取本机的外网地址的吧,在上面的截图中可以看到是新建了一个线程调用ThreadGetMyExternalIP来获取本机外网地址的,也叫扩展IP地址。我们先看源码:

获取本机外网地址

通过上面的代码可以看到为了保证可以获取本机外网地址,分别使用了91.198.22,70和checkip.dyndns.org分别获取本机外网地址,这个双重循环就是分别使用两种方式,其中第一次是使用ip地址方式,第二次使用域名地址方式。我们可以分别在浏览器中敲入上面的两个地址试验一下,我的结果是使用91.198.22.70的方式获取到了,但checkip.dyndns.org这个地址连接不到。所以这也是为什么会用双重循环的方式,这种编程习惯也值得我们借鉴。

大家可以看下我的实验结果:

获取本机外网IP地址

我们下面可以看下根据上面的IP地址和域名获取本机外网地址的过程和处理方式

创建连接获取外网地址

看到这里我们就已经对启动节点时候的网络连接有了一点了解,而且内容已经不少了。最主要是我们知道了获取本机地址的方式和源码里的结构。为了好消化,就先写到这里了。

作者:区块链研习社比特币源码研读班,black

相关文章

  • 比特币源码解读十三

    我们现在通过对Appinit2的分析看到了很多比特币的核心内容,现在我们要看的是第十一步。也有非常核心的内容。我们...

  • 比特币源码研读

    forest21000版 比特币源码研读之一比特币源码研读之二比特币源码研读之三比特币源码研读之四比特币源码研读之...

  • 开始研读比特币1

    1,进入比特币源码目录,先读读编译doc/build-unix.md,查看比特币源码如何编译,了解比特币的依赖库,...

  • 比特币源码解读八

    现在我们接着看RegisterNodeSignals 的下一个连接函数。 InitializeNode 这个函数在...

  • 比特币源码解读四

    我们接着上篇继续,现在来看第五步。 第五步:verify wallet database integrity 确...

  • 比特币源码解读六

    上篇我们看了ProcessMessages函数,这个函数就是侦听网络中的不同的消息命令来处理相应的逻辑。在...

  • 比特币源码解读三

    这篇我们主要分析下AppInit2的代码,这个函数在init.cpp中。这个函数分了12步完成了初始化客户端的功能...

  • 比特币源码解读二

    上次我们把bitcoind.cpp的大概流程过了一下,我们今天说下细节的内容。我们打开bitcoind.cpp文件...

  • 比特币源码解读一

    上次在ubuntu系统中将比特处源码编译环境设置好了后,还没有具体分析里面的代码,今天我们就解读一下。源码...

  • 比特币源码解读五

    我们开始init.cpp中的AppInit2的第六步:network initialization 网络初始化 第...

网友评论

    本文标题:比特币源码解读十三

    本文链接:https://www.haomeiwen.com/subject/pnscuxtx.html