1

我知道同一套接字对象的方法的并发调用会导致未定义的行为。

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

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

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 );

?

这似乎是某人不应该做的事情,但我在文档中找不到解决此类问题的任何特定位置。

4

1 回答 1

2

你是对的,这是异步 i/o 中的一大禁忌。调用 async_receive 两次实际上并没有什么意义,但是为了避免在发送时出现这种情况,可以暗示使用某种队列、boost::circular_buffer 等。这完全取决于您的应用程序。

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

于 2017-06-22T16:59:38.200 回答