深入分析驴子系列(1)

一直在看驴子的代码,网上进行深入分析的文章不多,也许 这和驴子的代码量太大, 代码质量不高也许有关系。但更多的也许是不想分享,舍不得分享。其实,它本身就是开 源的 不分享人家慢慢看也能看懂 。由于时间关系 我会陆续把分析的文章帖上来,与各 位网友分享,也希望大家拍砖 进行讨论 也把你的心得分享出来。。系列分析文章如果没 有特别注明 以easy mule 0.47为准

CListenSocket 类 的作用就是 监听 等待客户 端的socket 到来 并维护到来的套接字 把accept进来的套接字 加入到list 中

// 该函数的作用是创建本地的listensocket, 是否Accept 连接是由 winsock消息驱动
bool CListenSocket::StartListening()
{
   bListening = true;
   // Creating the socket with SO_REUSEADDR may solve LowID issues if emule was restarted
   // quickly or started after a crash, but(!) it will also create another problem. If the
   // socket is already used by some other application (e.g. a 2nd emule), we though bind
   // to that socket leading to the situation that 2 applications are listening at the same
   // port!
   if (!Create (thePrefs.GetPort(), SOCK_STREAM, FD_ACCEPT, thePrefs.GetBindAddrA(), FALSE/*bReuseAddr*/))
     return false;
   if (!Listen())
     return false;
   m_port = thePrefs.GetPort();
   return true;
}
// 该函数改名为RestartAccept 更合适
// 它的本意 是重新开始接受连接
// 为什么需要重新开始接受连接呢,原因是连接数过多情况 下,
// 会暂时StopListeing (bListening 设置为false;) ,
// 连接数少 的情况下会重新开始接受连接RestartListening;
// 应该注意的是:这个暂停和 重新开始并不实际关闭/打开本地listen端口,只是设置一个bool标志
void CListenSocket::ReStartListening()
{
   bListening = true;
    ASSERT( m_nPendingConnections >= 0 );
   if (m_nPendingConnections > 0)
   {
     m_nPendingConnections--;
     OnAccept(0);
   }
}

时间: 2024-09-11 20:06:10

深入分析驴子系列(1)的相关文章

深入分析驴子系列(2)

在 BOOL CemuleApp::InitInstance() 函数 的 672行(VERIFY( (m_hTimer = ::SetTimer(NULL, NULL, 300, StartupTimer)) != NULL ); ) 启动一个定时器 在该定时器的 执行函数( void CALLBACK CemuleDlg::StartupTimer(HWND /*hwnd*/, UINT /*uiMsg*/, UINT /*idEvent*/, DWORD /*dwTime*/)) 的 81

聊聊并发(一)深入分析Volatile的实现原理

本文属于作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/ftf-java-volatile 引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的"可见性".可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值.它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter

深入分析MFC文档视图结构(项目实践)

文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer模式的具体实现框架之一,Document/View Architecture通过将数据和其表示分开,提供了很好的数据层次和表现层次的解耦.然而,虽然我们使用MFC AppWizard就可以很轻松地获得一个支持Document/View Architecture的MFC程序框架,Document/View Architecture本身的复杂性加上VC产生的一系列代码足够让我们眼花缭乱,一时陷入云

Entity Data Model (EDM)深入分析, Part 2

实体 SQL (Entity SQL),它是一种新的 SQL 语言,其中加入了之前的 SQL 语言并不支持的基于概念的查询功能.ESQL 扩展现有 SQL 语言的方式与 EDM 扩展数据库中所使用的关系模型的方式十分类似.此外,ESQL 未绑定到任何特定于后台数据库的语法,因此可一次性编写查询(和/或应用程序),无论针对的是哪个后台数据库都无影响. Entity SQL 是基于文本的.面向集合的.延后绑定的查询语言,也受到了T-SQL的影响.可以使用Entity SQL 创建对EDM的查询,En

Linux堆内存管理深入分析(上)

Linux堆内存管理深入分析 (上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较多,这里就不累述了,但是关于堆溢出的漏洞利用资料就很少了.鄙人以为主要是堆溢出漏洞的门槛较高,需要先吃透相应操作系统的堆内存管理机制,而这部分内容一直是一个难点.因此本系列文章主要从Linux系统堆内存管理机制出发,逐步介绍诸如基本堆溢出漏洞.基于unlink的堆溢

SQL Server调优系列进阶篇(如何索引调优)

原文:SQL Server调优系列进阶篇(如何索引调优) 前言 上一篇我们分析了数据库中的统计信息的作用,我们已经了解了数据库如何通过统计信息来掌控数据库中各个表的内容分布.不清楚的童鞋可以点击参考. 作为调优系列的文章,数据库的索引肯定是不能少的了,所以本篇我们就开始分析这块内容,关于索引的基础知识就不打算深入分析了,网上一搜一片片的,本篇更侧重的是一些实战项内容展示,希望通过本篇文章各位看官能在真正的场景中找到合适的解决方法足以. 对于索引的使用,我希望的是遇到问题找到合适的解决方法就可以,

w3c系列CSS2.1之路(一)

CSS的学习一般是从看书看博客开始的,看到一定程度之后总觉得总是少了些什么,网上各类资料多半是提供怎么解决问题,很少有深入分析原理的.本系列是对w3.org中标准的CSS2.1进行学习,希望能从更深入的角度去看CSS. 有时间建议去看看官方原文:http://www.w3.org/TR/2011/REC-CSS2-20110607/ CSDN论坛上也有对CSS标准的详解系列:http://bbs.csdn.net/topics/340173664 本文作为系列开篇,是对CSS2.1的一个总体介绍

机器学习系列|从白富美相亲看特征预处理与选择

上篇 1. 引言 再过一个月就是春节,相信有很多码农就要准备欢天喜地地回家过(xiang)年(qin)了.我们今天也打算讲一个相亲的故事. 讲机器学习为什么要讲相亲?被讨论群里的小伙伴催着相亲,哦不,催着讲特征工程紧啊.只是我们不太敢讲这么复杂高深的东西,毕竟工程实践的经验太复杂了,没有统一的好解释的理论,一般的教材讲这方面的内容不多.我们就打算以一个相亲的故事为例,串一些特征工程的内容. 2. 故事背景 事先声明:本故事纯属虚构,如有雷同,纯属巧合! 海归白富美韩梅梅刚回国,还没适应工作,母亲

精品购物指南:史莱克系列遭遇中年危机

撰文/王子烨 马驰 编辑/王子烨 2001年出现的那个绿色的妖怪,它现在过得怎么样?如果套用一句流行的词汇形容史莱克,那他是个经济适用男--不高不瘦不帅.不会武功.不是"富二代",估计词汇量也不大,还是个人人喊打的怪物,但他就是凭借一颗真挚的心获得了公主和世界的爱.因为他踏实.纯朴,哪怕只有一碗粥,也会100%给他的公主,哪怕他的公主也是个怪物--<怪物史莱克>海报 2001年,<怪物史莱克>的诞生以恶搞与颠覆让世人眼前一亮,原来童话故事不一定要白马王子救公主,