短版本:如果我在ioserive中运行一个打开的tcp套接字,如果我停止服务会发生什么?数据是否应继续在tcp套接字中排队(假设服务器继续发送数据并且没有断开连接)?如果是这样,我可以通过重置和重新启动ioserive来检索该数据吗?
长版本:我正在尝试在基于asio的tcp套接字API上添加一个阻塞界面。
用户最初使用API打开套接字连接到服务器。
对于每个后续的API调用,ioservice都会被重置并启动,然后使用带有boost :: asio :: write的tcp套接字将数据发送到服务器,并等待响应。使用async_read_until处理来自服务器的响应。当收到响应时,调用处理程序,ioservice停止,原始阻塞API调用将从服务器释放回客户端。这适用于请求 - 响应类型命令。总结:
另一个命令是请求响应,它从服务器启动广播,更新客户端的内部缓存。我们的想法是,在初始尝试使用类似于上面的ioservice启动 - 停止过程刷新它之后,用户使用另一个API函数访问此缓存。但是,在此尝试之前,代码使用以下选项之一检查套接字上是否有可用的数据:
bool is_data_available() {
//boost::asio::socket_base::bytes_readable command(true);
//socket_->io_control(command);
//return command.get() > 0;
return socket_->available() > 0;
}
即使服务器已记录已发送数据,也从未有任何数据。
广播摘要: