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