比特币源码解读十三

我们现在通过对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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 一、快速术语检索 比特币地址:(例如:1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV)由一串...
    不如假如阅读 15,885评论 4 88
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,469评论 25 707
  • 看见生命的凋落与繁华 看见沙漠,看见遗落的街道吹过的风 看不见与黑夜相拥的温暖和不灭的光 看见藏青色的天,没有突然...
    陶瓷兔子不会碎阅读 120评论 0 0
  • 规避伸手 党,首先自己就不能是伸手党,建立自己的原则,规范行为,影响他人。生活中没有原则的人很多,这是我刚刚领悟到...
    微语world阅读 109评论 0 0