- 论坛徽章:
- 0
|
一个对象对boost网络接口的封装有一个Close()接口- boost::system::error_code ec;
- m_socket->cancel(ec);
- m_socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
- m_socket->close(ec);
- ......释放对象等操作
复制代码 觉大部分下都非常的正常, 有时候会有如下问题.....
当我调用上面代码后, 既然又收到异步消息, 说对方关闭连接,最终导致程序异常....- void CTcpSession::__readData()
- {
- if(m_socket != NULL)
- {
- memset(m_sData, 0, sizeof(m_sData));
- m_socket->async_read_some(boost::asio::buffer(m_sData, M_MAXBUFFERSIZE),
- m_strand.wrap(boost::bind(&CTcpSession::__handle_read, this,
- boost::asio::placeholders::error,
- boost::asio::placeholders::bytes_transferred)));
- }
- }
- void CTcpSession::__handle_read(const boost::system::error_code& err, size_t bytes_transferred)
- {
- if(err) //读数据错误
- {
- ErrorMsg("this = %p _handle_read is Error = %s value = %d", this, err.message().c_str(), err.value());
- if(2 == err.value() //End of file, 收到对方关闭连接
- || 104 == err.value()) //Connection reset by peer
- {
- m_pStreamInte->onConnectFaild();
- }
- }
- ...................
- }
复制代码 请问大家有越到这种情况吗...多谢... |
|