Using ServerTravel on a dedicated server causes clients on MacOS to disconnect

Hello.

I have a dedicated server built and running on Linux, it runs fine and both my Mac and Windows clients are able to connect to it, in the server there is a timer of 5 minutes, when it runs out, it executes the console command “ServerTravel mainMap” which is the same map the server was already on.
What happens is my Windows clients would remain on the server and the map and game will restart, and my MacOS clients would see that the map is loading again, their camera would be at the world origin position for a second, and then they are kicked back to the main menu. In the logs I see that Logout was called.

I’m not sure exactly what is going on or how to even debug this, is there a known issue with MacOS clients loading a map from the dedicated server calling ServerTravel?

I am using UE 5.1 built from source, building clients for Windows and MacOS and a server for Linux.

For more clarity, here are some logs I am seeing on the client that disconnects:

LogNet: UIpConnection::HandleSocketSendResult: Socket->SendTo failed with error 10 (SE_ENOTSOCK). [UNetConnection] RemoteAddr: 15.222.34.95:9000, Name: IpConnection_2, Driver: GameNetDriver IpNetDriver_2, IsServer: NO, PC: NULL, Owner: NULL, UniqueId: NULL:bh-francol-mbp-517E47B3004B416E1062CD963C4536B4 Connection beginning close timeout (Timeout = 0).
LogNet: UIpNetDriver::TickDispatch: Socket->RecvFrom: 10 (SE_ENOTSOCK) from 0.0.0.0:0. [UNetConnection] RemoteAddr: 15.222.34.95:9000, Name: IpConnection_2, Driver: GameNetDriver IpNetDriver_2, IsServer: NO, PC: NULL, Owner: NULL, UniqueId: NULL:bh-francol-mbp-517E47B3004B416E1062CD963C4536B4 Connection beginning close timeout (Timeout = 0).
LogNet: Error: UEngine::BroadcastNetworkFailure: FailureType = ConnectionLost, ErrorString = UIpNetDriver::TickDispatch: Socket->RecvFrom: 10 (SE_ENOTSOCK) from 0.0.0.0:0, Driver = GameNetDriver IpNetDriver_2
LogNet: Warning: Network Failure: GameNetDriver[ConnectionLost]: UIpNetDriver::TickDispatch: Socket->RecvFrom: 10 (SE_ENOTSOCK) from 0.0.0.0:0
LogNet: NetworkFailure: ConnectionLost, Error: 'UIpNetDriver::TickDispatch: Socket->RecvFrom: 10 (SE_ENOTSOCK) from 0.0.0.0:0'
LogNet: UNetConnection::Close: [UNetConnection] RemoteAddr: 15.222.34.95:9000, Name: IpConnection_2, Driver: GameNetDriver IpNetDriver_2, IsServer: NO, PC: NULL, Owner: NULL, UniqueId: NULL:bh-francol-mbp-517E47B3004B416E1062CD963C4536B4, Channels: 2, Time: 2023.10.17-17.35.00
LogNet: UChannel::Close: Sending CloseBunch. ChIndex == 0. Name: [UChannel] ChIndex: 0, Closing: 0 [UNetConnection] RemoteAddr: 15.222.34.95:9000, Name: IpConnection_2, Driver: GameNetDriver IpNetDriver_2, IsServer: NO, PC: NULL, Owner: NULL, UniqueId: NULL:bh-francol-mbp-517E47B3004B416E1062CD963C4536B4
LogNet: Error: UEngine::BroadcastNetworkFailure: FailureType = ConnectionLost, ErrorString = UIpNetConnection::HandleSocketSendResult: Socket->SendTo failed with error 10 (SE_ENOTSOCK). [UNetConnection] RemoteAddr: 15.222.34.95:9000, Name: IpConnection_2, Driver: GameNetDriver IpNetDriver_2, IsServer: NO, PC: NULL, Owner: NULL, UniqueId: NULL:bh-francol-mbp-517E47B3004B416E1062CD963C4536B4 Connection will be closed during next Tick()!, Driver = GameNetDriver IpNetDriver_2
LogNet: Error: UEngine::BroadcastNetworkFailure: FailureType = ConnectionLost, ErrorString = Your connection to the host has been lost., Driver = GameNetDriver IpNetDriver_2
LogNet: Warning: Encountered an error, cleaning up this connection now
LogNet: Browse: /Game/Maps/MainMenu?closed
LogNet: Connection failed; returning to Entry

@RandomCouch Did you ever find out what was causing this? I have seen the same error in the same scenario with MacOS clients.

Same exact issue here

@BFSKyle I unfortunately have not, I just stopped using the ServerTravel console command and changed my projects flow a bit to circumvent having to use it. Now I just have a system that will shut down my server when the timer runs out and users get sent back to a lobby where they can start a new game/server

Try this.
In Engine/Source/Runtime/Sockets/Private/Mac/SocketSubsystemMac.h function Close. replace it with

if (Socket != INVALID_SOCKET)
		{
			int32 error = closesocket(Socket);
			Socket = INVALID_SOCKET;
			return error == 0;
		}
		return false;