(P38)muduo_base库源码分析:完善TcpConnection,signal(SIGPIPE, SIG_IGN) ,可变类型解决方案

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值