我正在尝试使用boost :: asio将我用Unix套接字编写的软件移植到带有TCP套接字的版本。该程序旨在在Linux机器上运行。
在早期版本的代码中(使用Unix套接字)我使用了一个简单的检查来查看套接字缓冲区上是否有新数据,然后继续读取可预测的结构化数据:
ioctl(s_c, FIONREAD, &socketstatus);
while (socketstatus > 0)
{// do receive stuff
ioctl(s_c, FIONREAD, &socketstatus);}
有没有办法用boost :: asio做类似的事情? 还是一些更好的选择?
提前谢谢你 CB
答案 0 :(得分:3)
使用bytes_readable,这可以实现您的目的。
实现FIONREAD IO控制命令。
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::socket_base::bytes_readable command(true);
socket.io_control(command);
std::size_t bytes_readable = command.get();
答案 1 :(得分:2)