Boost ASIO:异常读取超时

时间:2017-02-01 13:11:16

标签: c++ boost boost-asio

我想实现简单的网络协议。消息通过套接字发送,并在超时毫秒内收到回复。这里出现的问题是如何在timeout处理程序和async_read_until处理程序之间设置顺序。不幸的是,股票在这里没有多大帮助:

http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/reference/io_service__strand.html

  

请注意,在以下情况中:

async_op_1(..., s.wrap(a));
async_op_2(..., s.wrap(b)); 
     

完成第一个异步操作将执行   s.dispatch(a),第二个将执行s.dispatch(b),但是   执行这些操作的顺序是未指定的。也就是说,你做不到   说明一个是否发生在另一个之前。因此没有   符合上述条件且不作出订购保证。

想象一下,io_service io在许多不同的处理程序,操作等之间共享。然后,在时间段 A B io.run()之间将运行一些与此特定套接字操作无关的处理函数。然后,操作系统可以在 C 时接收实际数据,其中 A < C <的即可。 此外,计时器可以在 D 的时刻到期,其 A < D <的即可。两个此事件:数据接收 C 和计时器到期 D 将在io.run()完成当前处理程序作业但不早于时间 B时检测到

我想要的是保留处理程序调用顺序,即async_read处理程序在async_wait处理程序之前被调用当且仅当 C <的 d 即可。 否则,我可能会在超时截止日期之前实际获得数据时结束这种情况,但是随着时间的推移而被丢弃。

0 个答案:

没有答案