Boost.asio,async_read和socket类型

时间:2016-07-12 02:33:53

标签: c++ asynchronous boost-asio coroutine

我有一个试图阅读的客户端/服务器应用程序。从客户端读取时,它是异步完成的。似乎客户端的async_read失败了。

我认为我的客户端在服务器执行相应的async_write之前尝试async_read(不完全确定)。所以我的问题是概念性的:

  1. 我可以在相应的async_write到服务器端的套接字之前执行async_read吗?
  2. 我不确定(现在不能尝试),但似乎那种套接字(阻塞/非阻塞)改变了1的行为。
  3. 如果我想使用非阻塞套接字,当我知道有可用的数据时,我怎么能async_read? bytes_readable或类似于我要找的东西吗?
  4. 非常感谢你。我很感激3个问题的确认,因为我已经尝试了很多东西,我没有时间尝试进一步的实验。

1 个答案:

答案 0 :(得分:0)

  
      
  1. 我可以在相应的async_write到服务器端的套接字之前执行async_read吗?
  2.   

  
      
  1. 我不确定(现在不能尝试),但似乎那种套接字(阻塞/非阻塞)改变了1的行为。
  2.   

很可能,但你不应该把套接字置于非阻塞模式。异步I / O是第三种I / O模型,与非阻塞模式无关。

  
      
  1. 如果我想使用非阻塞套接字,当我知道有可用数据时,我怎么能async_read?
  2.   

这是一个矛盾。异步I / O启动操作并在完成时提供集合。操作本身仍然阻塞,但不是异步调用者。如果要使用非阻塞套接字,则不应尝试使用异步I / O.