2010-07-23 53 views
1

我試圖從一個async_receive調用接收許多udp消息。我的信息是約。長度爲60個字節。boost :: asio udp - 如何獲得很多可變緩衝區?

我給一個async_receive調用一個緩衝陣列非常相似的提升文檔,但似乎無法得到全部填滿緩衝區。

char d1[128]; 
char d2[128]; 
char d3[128]; 

boost::array<boost::asio::mutable_buffer, 3> bufs = 
{ 
    boost::asio::buffer(d1), 
    boost::asio::buffer(d2), 
    boost::asio::buffer(d3) 
}; 

_socket.async_receive(bufs, handler); 

當我的處理程序被調用時,bytes_transferred等於一個消息長度(即60)。

我如何能獲得第二和第三緩衝任何想法填充?另外,如果第二個和第三個可變緩衝區被填充,我現在該如何?

+0

發佈了一些我們可以編譯的代碼,你的僞代碼並不足夠準確地描述問題。 – 2010-07-26 19:45:13

+0

如果您需要填充多個緩衝區,則必須對async_receive()進行多次調用。每次調用async_receive()都會收到一個UDP數據報(並且不行,您不應該在連續兩次調用async_receive())。另一個故事是,例如將消息的頭部和正文接收到兩個緩衝區中。 – 2011-03-14 15:51:14

回答

1

如果您希望在單次調用中接收多個數據報,您通常(不管Boost)需要使用recvmmsg。據我所知,Boost不使用recvmmsg,因此您需要使用Boost ASIO持有的本地套接字來使用它。這樣做的好處是可以在多個數據報可用時減少系統調用。