|
@@ -1895,18 +1895,22 @@ enet_host_service (ENetHost * host, ENetEvent * event, enet_uint32 timeout)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- host -> serviceTime = enet_time_get ();
|
|
|
+ do
|
|
|
+ {
|
|
|
+ host -> serviceTime = enet_time_get ();
|
|
|
|
|
|
- if (ENET_TIME_GREATER_EQUAL (host -> serviceTime, timeout))
|
|
|
- return 0;
|
|
|
+ if (ENET_TIME_GREATER_EQUAL (host -> serviceTime, timeout))
|
|
|
+ return 0;
|
|
|
|
|
|
- waitCondition = ENET_SOCKET_WAIT_RECEIVE;
|
|
|
+ waitCondition = ENET_SOCKET_WAIT_RECEIVE | ENET_SOCKET_WAIT_INTERRUPT;
|
|
|
+
|
|
|
+ if (enet_socket_wait (host -> socket, & waitCondition, ENET_TIME_DIFFERENCE (timeout, host -> serviceTime)) != 0)
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ while (waitCondition & ENET_SOCKET_WAIT_INTERRUPT);
|
|
|
|
|
|
- if (enet_socket_wait (host -> socket, & waitCondition, ENET_TIME_DIFFERENCE (timeout, host -> serviceTime)) != 0)
|
|
|
- return -1;
|
|
|
-
|
|
|
host -> serviceTime = enet_time_get ();
|
|
|
- } while (waitCondition == ENET_SOCKET_WAIT_RECEIVE);
|
|
|
+ } while (waitCondition & ENET_SOCKET_WAIT_RECEIVE);
|
|
|
|
|
|
return 0;
|
|
|
}
|