2011-08-02 100 views
1

我想從udp套接字讀取特定數量的字節。在tcp套接字中,我可以使用socket.read來指定要接收的數據量。我沒有找到UDP套接字的類似功能。我正在使用receive_from(),我可以指定要讀取的數據量,但是如果有更多數據,則不會讀取任何數據,並且出現跟隨錯誤。從boost asio udp socket讀取特定數據大小

"A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself" std::basic_string<char,std::char_traits<char>,std::allocator<char> > 

我無法找到我需要給出message_flags(第三個參數來receive_from),因此它會讀取指定的字節數什麼樣的價值。當然,我正在使用下面的代碼來讀取數據,但它要麼讀取所有的數據,要麼沒有數據。

 size_t size=socket.receive_from(boost::asio::buffer((const void*)&discRsp,sizeof(DataStructure)),remote_endpoint,0,errors); 
+0

沒有'IP :: TCP ::插座::閱讀()'方法,也許你的意思是'閱讀()'[免費功能] (http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/reference/basic_stream_socket/receive/overload1.html)? –

+0

oops我的壞。是的Sam我的意思是read()免費功能。但該函數不接受UDP套接字,因爲它的數據報套接字。我有什麼選擇:(。 – dev

回答

1

試試這個:

socket.set_option(boost::asio::socket_base::receive_buffer_size(65536));

+0

謝謝卡巴爾,我會試試看。 – dev