c++ - ENet 如何管理其到达的数据包?

标签 c++ c networking network-programming

ENet 是一个 UDP 网络库,此处提供教程 http://enet.bespin.org/Tutorial.html

如果我在一段时间内没有调用 enet_host_service(),但数据包在我没有“服务”时到达机器,会发生什么情况?它们是否在某处缓冲,等待调用 enet_host_service() ?

教程还说我可以用 0 超时调用这个函数,这意味着如果它不等待,它必须读取一个缓冲区...

最佳答案

我非常确定数据包将在操作系统 中缓冲,直到您调用enet_host_service(),因为在您调用enet_host_service() 之前,enet 根本无法执行任何操作。它完全死了,只要您自己的代码在运行,它的状态就不会改变。

当您调用 enet_host_service() 时,它将使用套接字 API 从操作系统检索 UDP 数据包,然后,它们可能由 enet 本身缓冲(如果有多个“event”或“packet”),因为 enet_host_service() 允许您一次处理一个事件(虽然它很可能从操作系统的数据中接收多个事件)。

因此,您应该尽可能频繁地调用 enet_host_service(),因为操作系统会在其缓冲区已满时简单地丢弃传入的数据包。

关于c++ - ENet 如何管理其到达的数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905714/

相关文章:

arrays - C 在堆数组中搜索字符串

C++ 11 花括号

c++ - 在 C++ 中使用 enable_shared_from_this 时检查现有的 shared_ptr?

c - 一种将字符串打印到文件的有效方法

c - 使用指针删除单词上的相似字母

android - 使用 Delphi XE5 连接到特定的 Wifi 网络进行 Android 应用程序开发

带有 JSON 处理程序的 C++ 客户端网络库

iphone - 如何在 iOS 上修改数据包的 IP header ?

C++ 检查列表是否包含子列表

c++ - 关于Boost共享内存的问题