2017-06-22 84 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文檔假設讀者已經熟悉使用異步套接字。

相關問題