2011-08-02 3 views
1

udp 소켓에서 특정 바이트 수를 읽고 싶습니다. TCP 소켓에서 나는받을 데이터의 양을 지정할 수있는 socket.read를 사용할 수 있습니다. UDP 소켓에 대해 비슷한 기능을 찾지 못했습니다. read_from()을 사용하여 읽을 데이터 양을 지정할 수 있지만 더 많은 데이터가 있으면 아무 데이터도 읽지 않고 다음과 같은 오류가 발생합니다.부스트 asio udp 소켓에서 특정 데이터 크기를 읽으십시오

"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

죄송합니다. 예 샘은 read() 자유 함수를 의미했습니다. 그러나이 함수는 데이터 그램 소켓 이후 UDP 소켓을 허용하지 않습니다. 여기 내 옵션은 무엇입니까 :(. – dev

답변

1

이 시도 :

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

+0

카발 감사합니다. – dev

관련 문제