2018年3月9日
摘要: 文章目录: 1. Demo 效果展示: 2. 进程和端口乱扯淡: 3. 查询进程和端口的 API 的介绍: 4. 根据进程 ID 获得该进程所打开的 TCP 和 UDP 端口: 5. 根据端口号来获得打开该端口号的进程: 6. 小结: 1. Demo 效果展示: 下面的这个 Demo 我只是用最简单 阅读全文
posted @ 2018-03-09 12:36 xmj 阅读(614) 评论(0) 推荐(0) 编辑
摘要: 一、HTTP协议简介 什么是HTTP?全称是HyperText Transfer Protocal,即:超文本传输协议,从1990年开始就在WWW上广泛应用,是现今在WWW上应用最多的协议,目前版本是1.1。 Http是应用层协议,当你上网浏览网页的时候,浏览器和Web服务器之间就会通过HTTP在I 阅读全文
posted @ 2018-03-09 12:35 xmj 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short和long总是默认为int一样;我们通常声明一个变量: int a; string s; 其实就是: 阅读全文
posted @ 2018-03-09 12:34 xmj 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 写这篇博客源于在阅读lighttpd源代码是遇到的一个关于assert应用的疑问。 在阅读lighttpd源代码时,发现比比皆是的对malloc的调用结果进行assert检查,比如:Buffer.c: 这里的assert(b)似乎有问题,实际release版本在运行中难道不会发生malloc返回NU 阅读全文
posted @ 2018-03-09 12:33 xmj 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 我们曾经在讨论C++的时候,经常会问到:“虚函数能被声明为内联吗?”现在,我们几乎听不到这个问题了。现在听到的是:“你不应该使print成为内联的。声明一个虚函数为内联是错误的!” 这种说法的两个主要的原因是(1)虚函数是在运行期决议而内联是一个编译期动作,所以,我们将虚函数声明为内联并得不到什么效 阅读全文
posted @ 2018-03-09 12:32 xmj 阅读(276) 评论(0) 推荐(0) 编辑
摘要: (一)基本概念 结构体是一个或是多个变量的集合,这些变量可能为不同的类型,为了处理的方便而将这些变量组合在一个名字之下。我们将关键字struct引入了结构声明中。结构声明包含在花括号内的一系列声明组成。例如: // 以下是一个巨普通的结构体,表示坐标。 // point 为结构标记;x, y为成员。 阅读全文
posted @ 2018-03-09 12:32 xmj 阅读(1003) 评论(0) 推荐(0) 编辑
摘要: 一、简介: SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。事实上,尽管SQLite拥有诸多关系型数据库的基本特征,然 阅读全文
posted @ 2018-03-09 12:31 xmj 阅读(127) 评论(0) 推荐(0) 编辑
摘要: tcp/ip网络通讯安全是一个广受关注的话题,现在也有一些基于tcp/ip加密技术标准如SSL,TLS等。但很多时候编写一些简单的网络通讯把这标准加密应用添加进来乎一下子把程序变得复杂了,而实现自己的加密算法那就更加不可取;其实通过一些现有的加密的技术应用完全可以实现即简单又安全的网络通讯程序。首先 阅读全文
posted @ 2018-03-09 12:31 xmj 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 设计概述 服务端通信组件的设计是一项非常严谨的工作,其中性能、伸缩性和稳定性是必须考虑的硬性质量指标,若要把组件设计为通用组件提供给多种已知或未知的上层应用使用,则设计的难度更会大大增加,通用性、可用性和灵活性必须考虑在内。 现以一个基于 IOCP 的通用异步 Windows Socket TCP 阅读全文
posted @ 2018-03-09 12:31 xmj 阅读(1577) 评论(0) 推荐(0) 编辑
摘要: 写在前面:出于项目的需要,最近打算对SQLite的内核进行一个完整的剖析,在此希望和对SQLite有兴趣的一起交流。我知道,这是一个漫长的过程,就像曾经去读Linux内核一样,这个过程也将是辛苦的,但我相信结果一定是美好的... ...接下来是第一章。 1、SQLite介绍 自几十年前出现的商业应用 阅读全文
posted @ 2018-03-09 12:30 xmj 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 1、TCP/IP参考模型为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型。尽管OSI的体系结构从理论上讲是比较完整的,但实际上,完全符合OSI各层协议的商用产品却很少进入市场。而使用TCP/IP 协议的产品却大量涌入市场,几乎所有的工作站都配有TCP/IP协议, 阅读全文
posted @ 2018-03-09 12:29 xmj 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 3、套接字的实现套接字最先是在UNIX的BSD版本实现的,所以也叫做BSD套接字,它隐藏了各个协议之间的差异,并向上提供统一的接口。Linux中实现套接字的基本结构:3.1、BSD套接字3.1.1、核心数据结构为了实现BSD套接字,内核提供一个重要的数据结构struct socket,它的定义如下: 阅读全文
posted @ 2018-03-09 12:29 xmj 阅读(219) 评论(0) 推荐(0) 编辑
摘要: Linux网络核心数据结构是套接字缓存(socket buffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。1、 套接字缓存skb由两部分组成:(1) 报文数据:它保存了实际在网络中传输的数据;(2) 管理数据:供内核处理报文的额外数据,这些数据构成了协议之间交换的控制信息。 阅读全文
posted @ 2018-03-09 12:29 xmj 阅读(821) 评论(0) 推荐(0) 编辑
摘要: 网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1) 作为基于硬件的网络适配器与基于软件的协议之间的接口;(2) 内核协议栈异步输入输出点。记住:网络设备软件对硬件的抽象网络设备与协议和网络适配器的 阅读全文
posted @ 2018-03-09 12:28 xmj 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 1、接收帧当网络适配器接收到数据帧时,就会触发一个中断,中断处理程序执行一些需要及时处理的任务,然后在下半部进行其它可以延迟的处理。中断处理程序主要进行以下一些操作:(1) 分配sk_buff数据结构,并将接收到的数据帧从网络适配器I/O端口拷贝到sk_buff缓冲区中;(2) 从数据帧中提取出一些 阅读全文
posted @ 2018-03-09 12:27 xmj 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 2.1、网络设备的注册与注销注册网络设备发生在下列情形: (1)加载网卡驱动程序 网卡驱动程序如果被编译进内核,则它在启动时被初始化,在运行时被作为模块加载。无论初始化是否发生,所以由驱动程序控制的网卡都被注册。 (2)插入可热拔插网络设备 当用户插入一块热拔插网卡,内核通知其对应的驱动程序以注册设 阅读全文
posted @ 2018-03-09 12:27 xmj 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 第一部分 编程模型 1、服务器编程模型 关于server编程模型,大师stevens在他的《UNP》一书中已经做了详细论述,这里不再重复,这里主要讲一下我的一些理解。 从线程的角度,可以分为两类,一是单线程,一是多线程。先来看单线程模型。 1.1、单线程模型 整个进程只有一个线程,由于只有一个线程, 阅读全文
posted @ 2018-03-09 12:26 xmj 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 2、协议相关2.1、第3层协议的管理在Linux内核中,有两种不同目的的3层协议:(1) ptype_all管理的协议主要用于分析目的,它接收所有到达第3层协议的数据包。(2) ptype_base管理正常的3层协议,仅接收具有正确协议标志符的数据包,例如,Internet的0x0800。注意sb_ 阅读全文
posted @ 2018-03-09 12:26 xmj 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 对于服务器程序,I/O是制约系统性能最关键的因素。对于需要处理大量连接的高并发服务器程序,异步I/O几乎是不二的选择。Linux和Windows都为异步I/O构建了大量的基础设施。本文总结了一下Linux和Windows下的异步I/O模型,并给出了一些使用这些模型的例子。 一般来说,服务器端的I/O 阅读全文
posted @ 2018-03-09 12:25 xmj 阅读(248) 评论(0) 推荐(0) 编辑
摘要: Free 我们经常用free查看服务器的内存使用情况,而free中的输出却有些让人困惑,如下: 图1-1 先看看各个数字的意义以及如何计算得到: free命令输出的第二行(Mem):这行分别显示了物理内存的总量(total)、已使用的 (used)、空闲的(free)、共享的(shared)、buf 阅读全文
posted @ 2018-03-09 12:25 xmj 阅读(171) 评论(0) 推荐(0) 编辑