2017-06-22 52 views
1

我知道同一个套接字对象的方法的并发调用会导致未定义的行为。在前一个完成之前再次调用boost ASIO async_receive()

但在调用第一个调用的完成处理程序之前调用异步操作并再次调用它(非并发)呢?

说,什么是以下(如有)预期的行为:

boost::asio::ip::udp::socket socket; 

// make socket join a multicast group, for instance 

socket.async_receive(boost::asio::null_buffers() , & handler1); 

// assume handler1() is not called between this two lines 

socket.async_receive(boost::asio::null_buffers() , & handler2); 

这似乎是某人不应该做的事情,但我无法在文档中找到解决此类问题的具体位置。

回答

2

你说得对,这是异步I/O中的一大禁忌。调用async_receive两次实际上没什么意义,但为了避免这种情况,发送可能意味着使用某种队列,boost :: circular_buffer或类似的东西。这完全取决于你的应用程序。

我认为这个问题没有解决,因为boost文档假设读者已经熟悉使用异步套接字。

相关问题