博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(P38)muduo_base库源码分析:完善TcpConnection,signal(SIGPIPE, SIG_IGN) ,可变类型解决方案
阅读量:4298 次
发布时间:2019-05-27

本文共 1021 字,大约阅读时间需要 3 分钟。

文章目录

1.完善TcpConnection

  • WriteCompleteCallback含义,可以理解为低水位标回调函数

  • HighWaterMarkCallback含义,高水位标回调函数

  • boost::any context_

  • eg:38\jmuduo\muduo\net\TcpConnection.h

    38\jmuduo\muduo\net\TcpConnection.cc

2.signal(SIGPIPE, SIG_IGN)

  • 应用编程:可以直接使用C,C++以及网络库代码,不使用系统调用
  • 系统编程:使用C C++以及系统调用
  • 应该由网络库封装好,上层应用程序仅是应用编程,不涉及到系统调用
  • eg:38\jmuduo\muduo\net\EventLoop.cc,class IgnoreSigPipe

3.可变类型解决方案

  • void*. 这种方法不是类型安全的

  • boost::any

    (1)任意类型的类型安全存储以及安全的取回,类型不会丢失
    (2)在标准库容器中存放不同类型的方法,比如说vectorboost::any,即vector先存放一个整型,后面再存放一个自定义类型,都是可以的。

  • eg:38\jmuduo\muduo\net\TcpConnection.h

    38\jmuduo\muduo\net\TcpServer.h

  • eg测试:38\jmuduo\tests\Reactor_test13.cc

    38\jmuduo\tests\CMakeLists.txt

  • 测试:一旦一个客户端连接过来,服务器端会不停的向服务端发送数据

    在这里插入图片描述
    在这里插入图片描述

  • eg测试:38\jmuduo\tests\Reactor_test13.cc

    38\jmuduo\tests\CMakeLists.txt
    注释掉38\jmuduo\muduo\net\TcpConnection.cc下面的,
    // channel_->setWriteCallback(
    // boost::bind(&TcpConnection::handleWrite, this));
    这样,就不会回调38\jmuduo\tests\Reactor_test13.cc里面的setWriteCompleteCallback(),那么
    38\jmuduo\tests\Reactor_test13.cc中 conn->send(msg);就只发送一次

  • 测试:客户端继续使用nc

    在这里插入图片描述

33:20

转载地址:http://wqiws.baihongyu.com/

你可能感兴趣的文章
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Mysql出现Table 'performance_schema.session_status' doesn't exist
查看>>
MySQL innert join、left join、right join等理解
查看>>
vivado模块封装ip/edf
查看>>
sdc时序约束
查看>>
Xilinx Jtag Access/svf文件/BSCANE2
查看>>
NoC片上网络
查看>>
开源SoC整理
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
已知子网掩码,确定ip地址范围
查看>>
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Mac 下docker路径 /var/lib/docker不存在问题
查看>>