We are facing an issue with our multiplayer dedicated game server built using engine 4.27. The server appears to accept player connections but receives a FBunch with the close set to ‘true’, eventually preventing the player from joining the server. Infromation of the server process is as follows:
Engine: Unreal Engine 4.27
Time since up: ~9 days
Number of players successfully played(~1 hour play time): 22000. (in span of 9 days)
Number of players rejected post 9 days: 100% (no players able to join completely & play)
Server process FPS: 30 (as expected)
Hi,
Unreal’s networking system is designed more towards serving shorter matches. When possible, we generally recommend each server process handles a single match, where the server is created for the match and shutdown when the match ends. We don’t generally run the engine or server processes for days at a time, so there may be issues with doing so.
Based on the logs provided, it’s hard to say what specifically is causing the disconnect. You may want to enable more verbose logging on the client to get a more detailed look at what is happening when it sends the close bunch.
One potential source of the disconnect is accumulated time properties losing precision. The NetDriver’s time property was changed to a double in 4.25 to mitigate this issue (see UNetDriver::GetElapsedTime), but there may be other systems in the engine that could run into similar issues with floating point precision. For example, I believe UWorld’s accumulated time values are floats in 4.27 (these were changed to doubles in 5.1).
Something else to be aware of is that FNetGuidCache entries are not cleared for dynamic replicated actors that have been destroyed, meaning that the values of NetGuids constantly increase as new ones are assigned. I don’t believe we’ve received any reports of issues because of this, but in 5.3, NetGUIDs were changed to use uint64 instead of uint32 in order to avoid any potential integer overflow problems.
Thanks,
Alex