有没有办法取消挂起操作(没有断开连接)或设置升压库函数的超时?
即我想在boost asio中阻止套接字设置超时?
socket.read_some(boost :: asio :: buffer(pData,maxSize),error_);
示例:我想从套接字中读取一些内容,但是如果已经过了10秒,我想抛出一个错误.
通过阅读其他Stack Overflow条目和boost::asio
文档,我已经确认没有同步ASIO读/写调用也提供易于使用的超时作为调用的参数.
我正在使用带有超时的select(2)调用来转换旧式Linux套接字应用程序,我需要做大致相同的事情.
那么最好的方法是什么boost::asio
?看一下asio文档,有很多令人困惑的例子,各种与定时器有关的东西,但我很困惑.
我很想看到一个简单易懂的例子:从套接字读取,但等待最多X秒,之后函数返回什么都没有,或者返回任何能够从套接字读取的内容在超时到期之前.
我需要知道如何读取(同步或异步并不重要)超时.我想检查设备是否与串口连接.
为此我使用asio::write
然后我等待设备的响应.
如果设备连接asio::read(serial, boost::asio::buffer(&r,1))
正常,但如果没有设备程序停止,这就是我需要超时的原因
我知道我需要一个,deadline_timer
但我不知道如何在async_read
函数中使用它.
它的工作原理的一个例子将非常有用.
我知道有许多类似的线程,我读了很多,但我找不到一个解决方案,帮助我解决我的问题!
根据http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/overview/cpp2011/futures.html,我们可以使用boost :: asio std::future
.但我找不到任何有关使用的信息boost::unique_future
,它有更多的功能,例如then()
.我该怎么用?
可能重复:
如何在boost asio中阻止套接字设置超时?
关于超时之前我读了一些条目,但我不明白.
我想要一个定义的连接超时.连接代码如下:
try{
boost::asio::ip::tcp::resolver resolver(m_ioService);
boost::asio::ip::tcp::resolver::query query(link.get_host(), link.get_scheme());
boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
boost::asio::ip::tcp::resolver::iterator end;
boost::system::error_code error = boost::asio::error::host_not_found;
while (error && endpoint_iterator != end)
{
m_socket.close();
m_socket.connect(*endpoint_iterator++, error);
}
}
Run Code Online (Sandbox Code Playgroud)
我也想要读取超时.
我用它boost::asio::read_until(m_socket, response, "\r\n");
来读取标题.
可以设置SIMPLE超时吗?