Boost Asio UDP retrieve last packet in socket buffer

Posted by Alberto Toglia on Stack Overflow See other posts from Stack Overflow or by Alberto Toglia
Published on 2010-05-04T23:07:39Z Indexed on 2010/05/04 23:48 UTC
Read the original article Hit count: 232

Filed under:
|
|
|
|

I have been messing around Boost Asio for some days now but I got stuck with this weird behavior. Please let me explain.

Computer A is sending continuos udp packets every 500 ms to computer B, computer B desires to read A's packets with it own velocity but only wants A's last packet, obviously the most updated one.

It has come to my attention that when I do a:

mSocket.receive_from(boost::asio::buffer(mBuffer), mEndPoint);

I can get OLD packets that were not processed (almost everytime).

Does this make any sense? A friend of mine told me that sockets maintain a buffer of packets and therefore If I read with a lower frequency than the sender this could happen. ¡?

So, the first question is how is it possible to receive the last packet and discard the ones I missed?

Later I tried using the async example of the Boost documentation but found it did not do what I wanted.

http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/tutorial/tutdaytime6.html

From what I could tell the async_receive_from should call the method "handle_receive" when a packet arrives, and that works for the first packet after the service was "run".

If I wanted to keep listening the port I should call the async_receive_from again in the handle code. right?

BUT what I found is that I start an infinite loop, it doesn't wait till the next packet, it just enters "handle_receive" again and again.

I'm not doing a server application, a lot of things are going on (its a game), so my second question is, do I have to use threads to use the async receive method properly, is there some example with threads and async receive?

Thanks for you attention.

© Stack Overflow or respective owner

Related posts about boost

Related posts about asio