socket
sockets命名空间封装linux API
InetAddress封装sockaddr_in*赋值
Socket封装socket操作
Buffer类
关于Muduo 中输入输出缓冲区的设计与实现的原理,陈硕已经写的很详细了,可参考[Buffer 类的设计][1] 。在这里,我主要关注代码数据方面。
Buffer类成员数据如下:
public:
static const size_t kCheapPrepend = 8;
static const size_t kInitialSize = 1024;
private:
std::vector<char> buffer_;
size_t readerIndex_;
size_t writerIndex_;
static const char kCRLF[];
一图胜千言(拷贝陈大的图):
只有一个是涉及到文件描述符的函数,即:
ssize_t readFd(int fd, int* savedErrno)
写在进一步阅读之前
阅读➕写博客,学习muduo网络库将近一周了。
原本没有写博文的打算,直到把base部分看完,回想到底读了些什么时,竟然有些茫然。便有了把阅读过程写下来的打算。
实际上,一直到现在,代码看了大半,仍旧有些糊涂。在进一步阅读之前,停下来,扯扯淡吧。
我发现自己在阅读代码时,有很严重问题:
一、过度关注于细节,忽视了逻辑
在读代码时,一旦发现不知道的Linux API 、C++特性、boost库等细节,总会想着去查。固然,这样的确会陆续学到一些东西,却也中断了读代码的节奏。个人认为还是应该以逻辑为主,细节应该在逻辑明了再去查资料,大部分细节并不影响阅读。
二、不重视测试案例
测试案例是能够迅速明白逻辑的有效手段,我在阅读时却不管不顾。这不但会加长理解时间,同时也会忽视应用或根本不明白如何应用。
三、不动笔
我所说的不动笔,是指不画代码流程图,类关系图。如果自己不尝试把代码逻辑或类之间调用关系画出来,一来记忆不会深刻,二来不能有效的理解。
四、不动脑
我基本上是根据各个类的API去学习,一个个去看代码。为什么我不能够记住对外提供哪些API呢?因为我自己没有想过,这个类应该实现哪些API,那个API如何实现之类的问题。
总之,阅读时,要先结合测试案例动脑想应该实现哪些功能,动笔画出类图。在不影响阅读代码的情况下,先忽略细节。阅读完一部分后,要动笔把代码串起来。最后再去查不知道的细节。