diff --git a/host.c b/host.c index 92fe1b6..a95fed6 100644 --- a/host.c +++ b/host.c @@ -334,13 +334,15 @@ enet_host_bandwidth_throttle (ENetHost * host) bandwidth, throttle = 0, bandwidthLimit = 0; - int needsAdjustment; + int needsAdjustment = 0; ENetPeer * peer; ENetProtocol command; if (elapsedTime < ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL) return; + host -> bandwidthThrottleEpoch = timeCurrent; + for (peer = host -> peers; peer < & host -> peers [host -> peerCount]; ++ peer) @@ -348,6 +350,9 @@ enet_host_bandwidth_throttle (ENetHost * host) if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) continue; + if (peer -> incomingBandwidth != 0) + needsAdjustment = 1; + ++ peersTotal; dataTotal += peer -> outgoingDataTotal; } @@ -356,13 +361,17 @@ enet_host_bandwidth_throttle (ENetHost * host) return; peersRemaining = peersTotal; - needsAdjustment = 1; if (host -> outgoingBandwidth == 0) bandwidth = ~0; else bandwidth = (host -> outgoingBandwidth * elapsedTime) / 1000; + if (dataTotal < bandwidth) + throttle = ENET_PEER_PACKET_THROTTLE_SCALE; + else + throttle = (bandwidth * ENET_PEER_PACKET_THROTTLE_SCALE) / dataTotal; + while (peersRemaining > 0 && needsAdjustment != 0) { needsAdjustment = 0; @@ -398,7 +407,6 @@ enet_host_bandwidth_throttle (ENetHost * host) peer -> outgoingBandwidthThrottleEpoch = timeCurrent; - needsAdjustment = 1; -- peersRemaining; bandwidth -= peerBandwidth; @@ -477,8 +485,6 @@ enet_host_bandwidth_throttle (ENetHost * host) } } - host -> bandwidthThrottleEpoch = timeCurrent; - for (peer = host -> peers; peer < & host -> peers [host -> peerCount]; ++ peer)