ENet 是一个 UDP 网络库,这里有一个教程http://enet.bespin.org/Tutorial.html
如果我在一段时间内没有调用 enet_host_service() 会发生什么,但是数据包在我没有“服务”时到达了机器上?他们是否在某处缓冲,等待调用 enet_host_service() ?
该教程还指出我可以用 0 超时调用这个函数,这意味着如果它不等待,它必须读取一个缓冲区......
ENet 是一个 UDP 网络库,这里有一个教程http://enet.bespin.org/Tutorial.html
如果我在一段时间内没有调用 enet_host_service() 会发生什么,但是数据包在我没有“服务”时到达了机器上?他们是否在某处缓冲,等待调用 enet_host_service() ?
该教程还指出我可以用 0 超时调用这个函数,这意味着如果它不等待,它必须读取一个缓冲区......
我很确定数据包会在操作系统中缓冲,直到您调用enet_host_service()
,因为在您这样做之前,enet 根本无法做任何事情。它完全死了,只要你自己的代码在运行,它的状态就不会改变。
当您调用enet_host_service()
时,它将使用套接字 API 从操作系统检索 UDP 数据包,然后,它们可能由 enet 本身缓冲(如果有多个“事件”或“数据包”),因为enet_host_service()
允许您处理一次一个事件(虽然它很可能从操作系统的数据中接收多个事件)。
因此,您应该enet_host_service()
尽可能频繁地调用,因为操作系统会在其缓冲区已满时简单地丢弃传入的数据包。