我最近一直在学习提升asio,尤其是UDP。我熟悉基础知识,但有一个关于UDP如何处理传入消息的问题。在本教程中(参见此处的源代码:http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/tutorial/tutdaytime6/src.html),UDP服务器的操作类似于(非常伪代码):
startReceive(){
async_receive(boost::bind(handler),...other params);
}
handler(){
doStuffToDataReceived();
startReceive(); //start the receiving process over again to allow it to receive more data
}
我的问题是,如果数据在“doStuffToDataReceived()”期间到达服务器,在startReceives重新开始之前,该数据是否会丢失,或者它是否在那里等待startReceive再次发生然后立即检索?
谢谢!
答案 0 :(得分:0)
UDP堆栈有一个缓冲区,因此上例中的数据不会丢失。
但请注意,允许UDP在各种情况下丢弃数据包。因此,随着UDP服务器吞吐量的增长,doStuffToDataReceived
的时间可能变得更加重要。