提升asio:是否可以将接受的tcp套接字转换为basic_socket_iostream(或以某种方式从中获取)?

Rel*_*lla 6 c++ sockets boost tcp boost-asio

所以这是我的问题:我们已经有accepted一个提升asio tcp套接字.我们所有的API都使用它.我们只需要在一个函数中执行"timeouted read".

这是可以做到这样的"timeouted读"如图所示这里.但是我从我的API获得了提升asio tcp socket,所以我想知道是否有可能将Boost :: asio socket转换为basic_socket_iostream.怎么做?

Sam*_*ler 4

我想知道是否有可能将 Boost::asio 套接字转换为 basic_socket_iostream。怎么做?

您可以使用它来获取指向描述符的tcp::iostream::rdbuf()指针。socket::basic_socket_streambufassign()

#include <boost/asio.hpp>

int
main()
{
    boost::asio::io_service io_service;
    boost::asio::ip::tcp::socket socket( io_service );
    boost::asio::ip::tcp::iostream stream;
    stream.rdbuf()->assign( boost::asio::ip::tcp::v4(), socket.native_handle() );
}
Run Code Online (Sandbox Code Playgroud)

虽然这非常复杂,但我强烈建议不要走这条路。正如拉尔夫的回答所表明的那样,以及对您的链接问题的回答所表明的那样,您确实应该deadline_timer为此使用 a 。