[Net] ENet poll now only service the connection once.
It used to call `enet_host_service` until all events were consumed, but that also meant constantly polling the connection leading to potentially unbounded processing time. It now only service the connection once, and instead consumes all the retrieved events via `enet_host_check_events`.
This commit is contained in:
parent
25636f8db7
commit
3b43dfee11
|
@ -217,20 +217,23 @@ void NetworkedMultiplayerENet::poll() {
|
|||
|
||||
_pop_current_packet();
|
||||
|
||||
ENetEvent event;
|
||||
/* Keep servicing until there are no available events left in queue. */
|
||||
while (true) {
|
||||
if (!host || !active) { // Might have been disconnected while emitting a notification
|
||||
if (!host || !active) { // Might be disconnected
|
||||
return;
|
||||
}
|
||||
|
||||
ENetEvent event;
|
||||
int ret = enet_host_service(host, &event, 0);
|
||||
|
||||
if (ret < 0) {
|
||||
// Error, do something?
|
||||
break;
|
||||
ERR_FAIL_MSG("Enet host service error");
|
||||
} else if (ret == 0) {
|
||||
break;
|
||||
return; // No events
|
||||
}
|
||||
|
||||
/* Keep servicing until there are no available events left in the queue. */
|
||||
do {
|
||||
if (!host || !active) { // Check again after every event
|
||||
return;
|
||||
}
|
||||
|
||||
switch (event.type) {
|
||||
|
@ -436,7 +439,7 @@ void NetworkedMultiplayerENet::poll() {
|
|||
// Do nothing
|
||||
} break;
|
||||
}
|
||||
}
|
||||
} while (enet_host_check_events(host, &event) > 0);
|
||||
}
|
||||
|
||||
bool NetworkedMultiplayerENet::is_server() const {
|
||||
|
|
Loading…
Reference in New Issue