【发布时间】:2016-06-14 07:38:13
【问题描述】:
我的C++ library 正在使用 boost::asio_connector_async 列表建立 tcp 连接
问题是,如果由于某种原因关闭了其中一个流,则 boost 不会向我的库发送有关相同的信息。
因此,我的库永远无法检测到哪些流已关闭,哪些仍处于打开状态。
我的库包含一个 boost::asio_connector_async 类的对象(通过连接器的名称)并以这种方式连接到主机、端口:
connector.async_connect(hostname.c_str(), qport.c_str(), boost::bind(bc::asio_bind_sock_chan<pubsub_channel,pubsub_channel::text_marshaler_registry>(),boost::ref(chan), boost::ref(mar_reg), hostname, qport, channel_logger, _1, _2, _3));
当特定的<host,port> 流关闭时,函数boost::asio_connector_async::on_stream_closed 会从文件asio_stream_async.hpp 内部调用
void on_stream_closed(void * sp, const std::string & host, const std::string port) {
boost::channel::logger_stream(logger_) << "boost::channel::asio_connector_async::on_stream_closed - " << host << ":" << port << ": stream 0x" << sp << " closed";
}
我想将我的库附加到boost::asio_connector_async::on_stream_closed,这样每当调用这个特定函数时,我的库中的某些函数也会被调用,以便我的库知道哪个特定流已关闭,然后应该尝试重新连接那条溪流
请建议我怎样才能达到同样的效果?我无论如何都无法在不修改 boost 库的情况下实现这一点(我不应该这样做)
如果有其他方法可以检测关闭的连接,请也向我推荐这些方法。
我是这种网络编程的新手,因此需要相同的帮助。 提前致谢
【问题讨论】:
标签: c++ sockets c++11 boost tcp