我试图端口的软件,我跟Unix套接字写与TCP套接字版本,使用boost :: ASIO。 该计划的目的是在Linux机器上运行。
在代码的早期版本(使用Unix套接字),我用一个简单的检查,看看是否有在套接字缓冲区的新数据,然后用读预见的结构化数据出发:
ioctl(s_c, FIONREAD, &socketstatus);
while (socketstatus > 0)
{// do receive stuff
ioctl(s_c, FIONREAD, &socketstatus);}
有没有办法做的boost :: ASIO类似的东西? 或者一些更好的方法?
谢谢你在前进CB
使用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();
您可以从提取本地描述符boost::asio::ip::tcp::socket
使用native()
方法 ,这应该只是罚款与您现有的代码。
虽然,我质疑你这样做的动机。 该短耳事件反应器实现使用轮询机制epoll
上的Linux 。 应该没有必要轮询套接字读取或写入外io_service
事件循环。