10 2013 档案

摘要:TheC10Kproblem[HelpsavethebestLinuxnewssourceontheweb--subscribetoLinuxWeeklyNews!]It'stimeforwebserverstohandletenthousandclientssimultaneously,don'tyouthink?Afterall,thewebisabigplacenow.Andcomputersarebig,too.Youcanbuya1000MHzmachinewith2gigabytesofRAMandan1000Mbit/secEthernetcardfor$1200 阅读全文
posted @ 2013-10-31 15:01 老司机 阅读(1370) 评论(0) 推荐(0) 编辑
摘要:最近看了《HTTP权威指南》和《UNP》有了写一个简单的web服务器的想法,正好这个学期没有什么课,所以就花了一个星期这样写了一个出来,鉴于本人水平有限,如果有什么设计或代码错误的,希望各位指出哈。tinyhttp web服务器的架构为epoll + 多线程 + sendfile, 本来想用线程池代替的因为每来一个连接就new一个线程这样对于OS来说负担太大,并且线程一旦过多线程切换就会花费很大代价造成性能瓶颈,但是我打算之后单独写一个线程池代码示例的说,所以这个版本就使用多线程来代替线程池了。tinyhttp暂时只支持GET和HEAD方法,支持的首部不多大概七八个吧,支持伪长连接(我觉得.. 阅读全文
posted @ 2013-10-16 10:52 老司机 阅读(6186) 评论(4) 推荐(2) 编辑
摘要:在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性。事实上,很难找到一种不支持 Sockets API 的现代语言。该 API 相当简单,但新的开发人员仍然会遇到一些常见的隐患。本文识别那些隐患并向您显示如何避开它们。隐患 1.忽略返回状态第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。反过来,这可能传播错误,使定位问题的源头变得困难。捕获并检查每一个返回状态,而不是忽略它们。考虑清单 1 显示的例子,一个套接字 send 函数。清单 1. 忽略 API 函数 阅读全文
posted @ 2013-10-07 20:51 老司机 阅读(1013) 评论(0) 推荐(0) 编辑
摘要:在2.6.24内核中链路层接收网络数据包出现了两种方法,第一种是传统方法,利用中断来接收网络数据包,适用于低速设备;第二种是New Api(简称NAPI)方法,利用了中断+轮询的方法来接收网络数据包,是linux为了接收高速的网络数据包而加入的,适用于告诉设备,现在大多数NIC都兼容了这个方法。 今天我的任务是扒一扒网络数据包在传统方法也就是低速路径中如何传入链路层以及如何将其发送给上层网络层的。下面先来看看这条低速路径的简略示意图: 1 //当产生硬件中断时,此中断处理例程被调用.例程确定该中断是否是由接收到的分组引发的,如果是则调用net_rx 2 static irqreturn_... 阅读全文
posted @ 2013-10-05 23:30 老司机 阅读(1849) 评论(0) 推荐(0) 编辑
摘要:最近研究了linux内核的网络子系统上的网络分组的接收与发送的流程,发现这个叫sk_buff的东西无处不在,内核利用了这个结构来管理分组,在各个层中传递这个结构,因此sk_buff可以说是linux内核网络子系统的基石,所以我决定在这篇文章中好好扒一扒这个sk_buff。 下面列出我我认为比较重要的sk_buff中的成员变量: 内核是利用一个双链表来管理sk_buff的,不过不使用内核的标准双链表而是自己实现了双链表:struct sk_buff *next; struct sk_buff *prev;struct sock *sk是sk_buff关联的socketktime_t t... 阅读全文
posted @ 2013-10-04 11:44 老司机 阅读(2720) 评论(0) 推荐(4) 编辑

点击右上角即可分享
微信分享提示