C++ ENet如何管理其到达的数据包?
ENet是一个UDP网络库,这里提供了一个教程 如果我在一段时间内没有调用enet_host_service(),但数据包在我没有“服务”时到达机器,会发生什么情况?它们是否被缓冲在某个地方,等待对enet_host_service()的调用C++ ENet如何管理其到达的数据包?,c++,c,networking,network-programming,C++,C,Networking,Network Programming,ENet是一个UDP网络库,这里提供了一个教程 如果我在一段时间内没有调用enet_host_service(),但数据包在我没有“服务”时到达机器,会发生什么情况?它们是否被缓冲在某个地方,等待对enet_host_service()的调用 本教程还指出,我可以在0超时的情况下调用此函数,这意味着如果它不等待,它必须读取一个缓冲区…我非常确定,在您调用enet\u host\u service()之前,数据包将在操作系统中缓冲,因为在您这样做之前,enet根本无法做任何事情。它完全死了,只要您
本教程还指出,我可以在0超时的情况下调用此函数,这意味着如果它不等待,它必须读取一个缓冲区…我非常确定,在您调用
enet\u host\u service()
之前,数据包将在操作系统中缓冲,因为在您这样做之前,enet根本无法做任何事情。它完全死了,只要您自己的代码正在运行,它的状态就不会改变
当您调用enet\u host\u service()
时,它将使用套接字API从操作系统检索UDP数据包,然后,它们可能由enet本身缓冲(如果有多个“事件”或“数据包”),因为enet\u host\u service()
允许您一次处理一个事件(虽然它可能会从操作系统的数据接收多个事件)
因此,您应该尽可能经常地调用
enet\u host\u service()
,因为当缓冲区已满时,操作系统只会丢弃传入的数据包。真的,这里有一个免费的答案!谢谢,像往常一样摇摆:)有没有办法知道操作系统可以存储多少数据包?它依赖于以太网芯片吗?@jokoon不确定,但我认为它依赖于操作系统,甚至可能是可配置的。我不认为这取决于以太网芯片,因为UDP比以太网的级别更高,尽管它可能也有某种缓冲区。有关更多信息,请参见此。