
网络编程
文章平均质量分 54
菜鸟的Zoom之旅
这个作者很懒,什么都没留下…
展开
-
【网络编程】muduo库——InetAddress类
inet_aton() 转换网络主机地址ip(如192.168.1.10)为二进制数值,并存储在struct in_addr结构中,即第二个参数*inp,函数返回非0表示cp主机有地有效,返回0表示主机地址无效。inet_ntoa 函数转换网络字节排序的地址为标准的ASCII以点分开的地址,该函数返回指向点分开的字符串地址(如192.168.1.10)的指针,该字符串的空间为静态分配的,这意味着在第二次调用该函数时,上一次调用将会被重写(复盖),所以如果需要保存该串最后复制出来自己管理!原创 2023-08-21 14:04:47 · 173 阅读 · 0 评论 -
【网络编程】muduo库——Timestamp类
explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,使得不能发生相应的隐式类型转换,只能以。这里的时间类主要是为了调取当前时间,并进行格式化,方便后续调用(如在Logger中调用)申明:这是一个仿muduo库的项目,在这里只截取一些重要的部分进行仿写~其实为了严谨考虑,所有带参的构造函数都应该使用explicit。下面实现类方法,我们这里借助了time的库函数。第二个方法使用了explicit关键字。原创 2023-08-20 22:59:17 · 167 阅读 · 0 评论 -
【网络编程】muduo库——Logger日志类
其实设置日志级别 或者是获取单例等,对于调用者来说是不重要的,因为调用者只想简单的调用一个函数来完成日志的输出,如果我们直接将上述类交给调用者,他们用起来还是太复杂了。1、因为日志对象在整个项目中是唯一的,所以采用单例模式,来获取日志对象。这里的宏定义为什么使用do……while(0)呢,可参考下面的博客,总之就是。和_ _VA_ARGS_ _是组合使用的,用在不确定参数个数的场合中。其内部实现如下所示,也是主打一个简单易懂,这里就不多说啥了。可变参数宏...和_ _VA_ARGS_ _原创 2023-08-20 22:01:23 · 210 阅读 · 0 评论 -
【网络编程】muduo库——noncopyable
继承自这个类的子类,都直接拥有了禁止拷贝的功能,而不用在自身的类中再一个个单独禁用拷贝。可以说 这是一个极为巧妙的设计。在研读muduo库源码时,可以发现其中的很多类都是私有继承自noncopyable的。继承自 noncopyable 之后,派生类对象可以正常地构造和析构。其将拷贝构造和拷贝运算符禁止使用了,然后析构和构造函数保持默认。其实从名字也可以得知 noncopyable——不可复制。那么这是一个什么类呢?为什么要继承这个类?但是派生类对象无法进行拷贝构造和赋值操作。原创 2023-08-20 20:51:02 · 183 阅读 · 0 评论 -
【网络编程】epoll
若我们有几百万的客户连接,这个数组肯定是越大越好,若我们只有十几个的客户连接,若将数组创建的很大,就会造成空间的浪费,而我们也无法预知一共有多少个连接,因此哈希表就不太适合。其实红黑树和就绪队列存储在同一个结构体中(epitem),当epitem中对应的文件描述符上的事件(event)已经就绪的时候,回调函数就会将该节点连接到已就绪的双端就绪队列中,其实只是在红黑树中做了指针的链接,而我们为了描述更加清晰,可以直接说将红黑树上相应的节点拷贝到就绪列表中。epoll通过内核和⽤户空间共享⼀块内存来实现的。原创 2023-08-03 12:42:29 · 175 阅读 · 0 评论 -
【网络编程】poll
fds:是一个struct pollfd 结构体数组,这是一个需要检测的文件描述符的集合。events及revents取值,如果有多个事件需要检测,用|即可,如同时检测读和写:POLLIN|POLLOUT。-1:阻塞,当检测到需要检测的文件描述符有变化,解除阻塞。nfds:这个是第一个参数数组中最后一个有效元素的下标 + 1。>0(n):检测的集合中有n个文件描述符发生了变化。>0:具体的阻塞时长(ms)timeout:阻塞时长。通过man poll查看帮助。原创 2023-08-02 22:42:02 · 334 阅读 · 0 评论 -
【网络编程】select
fd_set:是一块固定大小的缓冲区(结构体), sizeof(fd_set)=128,即对应1024个比特位。初始置为-1,当有状态改变时,置为相应文件描述符。轮训时,跳过标记为-1的客户端,加快遍历速。个最大可监听数量,可以申请等量客户端数组。对于问题二:对读缓存区循环读,直到返回。内核检测完毕后,返回给用户态结果。调用select委托内核检测。timeval:结构体类型。通过man select。select参数列表说明。原创 2023-08-02 22:01:45 · 279 阅读 · 0 评论 -
【网络编程】五种网络IO模式
对于一次IO访问(以read为例),数据会中,然后。所以说,当一个read操作发生时,会经历两个阶段:1、等待数据准备2、将数据从内核拷贝到进程中linux系统产生了下面五种网络模式的方案1、阻塞IO(blocking IO)2、非阻塞IO(nonblocking IO)3、IO多路复用(IO multiplexing)4、信号驱动IO(signal driven IO)不常用5、异步IO (asynchronous IO)1、阻塞IO(blocking IO)这种IO模型是。原创 2023-08-02 21:05:11 · 490 阅读 · 0 评论 -
【网络编程】同步IO/异步IO
继续开始做自己的事情,而当I/O操作已经完成的时候会得到I/O完成的通知。同步IO需要发起者进行内核态到用户态的数据拷贝过程,所以这里必须阻塞。,内核线程将数据从内核态拷贝到用户态,所以这里没有阻塞。的去查看I/O操作是否就绪。原创 2023-08-02 16:44:00 · 300 阅读 · 0 评论 -
【Linux】回声服务器
回声服务器原创 2022-12-31 19:19:09 · 251 阅读 · 0 评论 -
【网络编程】为什么不是两次握手
为什么不是两次握手原创 2022-10-18 20:34:34 · 679 阅读 · 0 评论