2011-08-02 62 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