4

ENet 是一个 UDP 网络库,这里有一个教程http://enet.bespin.org/Tutorial.html

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

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

4

1 回答 1

3

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

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

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

于 2012-11-18T10:06:59.217 回答