阅读libevent源码时,搞懂它的网络处理逻辑,应该是一件比较容易的事儿。但是我们不应该局限于此,深入每一处细节,体会作者的设计意图才是学习libevent的最佳”食用”方式。学习掌握这些开源库里边的通用编程技法,对提高我们的编程能力大有好处。
抽丝剥茧libevent——前言
网上已经流传了各种版本的libevent源码剖析了,今天再开这个系列的剖析,似乎有点凑热闹的意思了。为了对得起标题里的”抽丝剥茧”,我打算深入libevent的每一处细节,从最根本处分析libevent是如何工作的。
由于libevent是跨平台的网络库,后端的IO复用模型会因所在平台的不同而有所差异,但是原理大致相当,我选择的是最常用的linux平台。
目前心里边有一个大纲:先从libevent通用的一些编程技法讲起,如果是第一次阅读开源项目,难免会对一些常见的C语言编程技巧感到陌生(例如C语言里实现多态)。然后升入介绍epoll的用法 ,再通过实现一个Echo服务器介绍Reactor设计模式,到这里差不多能够明白libevent工作流是怎么回事了,这之后再从libevent的数据结构(struct event,struct event_base)剖析过来,一点点深入细节,抽丝剥茧。最后是libevent的高级功能以及应用。
win10驱动通过微软whql认证经验
whql认证是什么
whql(Windows Hardware Quality Labs)认证是微软针对第三方的驱动程序进行的一系列测试,旨在确保驱动程序的兼容性。windows 10 1607以后版本的操作系统版本安装的驱动程序都需要先通过whql认证。
注册公司开发者账号
在注册微软开发者账号前,首先确保先拥有一个EV代码签名的证书。这个证书需要向微软授信的机构购买。
网上的介绍都是去https://sysdev.microsoft.com 注册开发者,并进行HLK测试,实际上现在最新的开发者中心已经是这里了:https://developer.microsoft.com/。注册过程不再赘述。
为什么DHCP要基于UDP协议?
如果你是因为看到这个标题而点进来的话,那么可能会让你失望了,因为我还没找到答案。
网上看到一个问题:”使用DHCP获取IP的时候,在事先没有ip的情况下,客户机是怎么和DHCP服务器通信的呢?”第一反应DHCP是链路层的协议,在链路层广播。
如上图,ARP协议就是通过链路层的广播获取目标的MAC地址。要是DHCP也在链路层广播,也说得通:当电脑加入一个新的局域网时,首先通过链路层广播请求获取一个新的ip,DHCP服务器的网卡收到广播,分配ip池中的一个可用ip,通过广播包里的MAC地址将IP下发。似乎也说得通。
在windows下编译libssh2
前两个星期的时候对一条悲伤的新闻印象比较深刻,Google Chrome宣布将FTP站点标记为不安全。由于FTP具有的致命的缺陷:密码和文件内容都使用明文传输。估计再苟延残喘几年,就快成互联网的化石了。目前FTP的替代协议用的最多的就是SFTP了。
STP(SSH File Transfer Protocol)是一款基于SSH协议的文件传输协议。SSH保证了其数据在传输的过程中安全不被窃听。大学的时候实现过一个简单的FTP的服务端程序,今天正好有空,打算学习一下SFTP。SFTP在服务端并没有单独的守护进程,和SSH都是使用的sshd。因此我打算在windows上编译一下libssh2的库(早期的ssh1存在一些安全性的漏洞),看一下自带的DEMO程序 。libssh2在Github上只有200多个star,关于它怎么编译的中文内容不是很多,于是我记录下来编译的过程。