我对 boost::asio 很陌生,我遇到了一个我真的不知道如何解决的问题,请你帮帮我。
一般来说,我正在尝试基于 boost::asio 实现代理。我正在使用 async_read_some 函数从服务器读取响应,如下所示:
_ssocket.async_read_some(boost::asio::buffer(_sbuffer),
boost::bind(&connection::handle_server_read_body_some,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred
));
一切都很好,它读取了一些数据和调用处理程序。问题出在我正在调用 async_read_some 函数的那一刻 - 没有更多数据可以从套接字读取。所以处理程序不会在大约 15 秒内被调用 - 直到 EOF 被触发。(因此服务器套接字断开连接)。我尝试了不同的读取函数,并且所有这些函数仅在读取 1 个或 mote 字节或出现错误时返回。
问题是有时我不知道我需要读取多少字节 - 所以我只需要读取所有存在的内容。我试着用
boost::asio::socket_base::bytes_readable
或者
_ssocket.available(err)
要弄清楚套接字上有多少字节可用,但问题是这些函数返回的字节数可以在没有阻塞的情况下读取,所以我不能以此为基础实现我的实现,即使从测试中我看到有时 bytes_readable 会返回 0 -并在同一个套接字上调用 async_read_some - 读取一堆数据。
我的问题是 - 当没有更多数据要从套接字读取时,有没有办法获得 imidiate 返回(在同步调用的情况下)/处理程序调用(在异步的情况下)?因为目前它只挂了 15 秒,直到 EOF。
我会向您提供任何建议或提示。