EOS Dedicated Server: Unable to connect through session browser, on some servers only direct connection works

I’ve implemented dedicated server connection using the EOS OSS. When hosting on my test server (Linux and Windows tested), a test user outside my network is able to see the session and join the server with no issues. I’ve only had to forward the game port to that host.

However, when deployed to a server operated by a game server vendor (Windows), the server is not joinable through the session browser. The session is visible in browser, but the connection fails.Opening a direct connection to that server through console (open ‘ip:port’) joins the server successfully, so the game port is certainly accessible. It’s only the session join that fails.

We’ve had no issues with that server vendor previously hosting Steam versions of our game, and they host other EOS-powered games such as Satisfactory, Hell Let Loose and Squad.

As is common for these providers, they use the -multihome argument with the servers, in case that could cause any issues (it did not in my own tests). There’s nothing particularily custom about the EOS implementation. Clients log in using Steam. Server logs in as TrustedServer with no Steam involved. P2P sockets are not used as this is a dedicated server. I’ve included the most relevant config fields below.

To help me and the vendor debug this issue, my question is what could cause a situation where the session is not joinable on some hosts, yet the direct IP join works (so should be no port issue)?

[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/SocketSubsystemEOS.NetDriverEOS",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="DemoNetDriver",DriverClassName="/Script/Engine.DemoNetDriver",DriverClassNameFallback="/Script/Engine.DemoNetDriver")

[/Script/OnlineSubsystemEOS.NetDriverEOS]
bIsUsingP2PSockets=false

[OnlineSubsystem]
DefaultPlatformService=EOS
NativePlatformService=Steam

[/Script/OnlineSubsystemEOS.EOSSettings]
(only showing relevant fields here)
bUseEAS=False
bUseEOSConnect=True
bMirrorStatsToEOS=False
bMirrorAchievementsToEOS=False
bUseEOSSessions=True
bMirrorPresenceToEAS=False
bUseNewLoginFlow=True
SteamTokenType=WebApi:epiconlineservices

Here’s the (condensed) code used to create a session. As it’s a dedicated servers, p2p sockets or lobbies are not used.

TSharedRef SessionSettings = MakeShared();
SessionSettings->bAllowJoinInProgress = true;
SessionSettings->bAllowJoinViaPresence = false; // can’t do presence on EOS without an user
SessionSettings->bAntiCheatProtected = false; // no EAC used
SessionSettings->bIsLANMatch = false; // not LAN
SessionSettings->bShouldAdvertise = true;
SessionSettings->bUseLobbiesIfAvailable = false; // can’t do lobbies with EOS without an user
SessionSettings->bUseLobbiesVoiceChatIfAvailable = false; // can’t do presence on EOS without an user
SessionSettings->bUsesPresence = false; // can’t do presence on EOS without an user
SessionSettings->bUsesStats = false; // sensible?
SessionSettings->NumPublicConnections = NumPublicConnections;

SessionSettings->bIsDedicated = true;
SessionSettings->bAllowInvites = false; // requires presence
SessionSettings->bAllowJoinViaPresence = false; // superset by bShouldAdvertise
SessionSettings->bAllowJoinViaPresenceFriendsOnly = false; // same as above

plus few extra settings through SessionSettings→Settings.Add(…)

Sessions->CreateSession(0, NAME_GameSession, *SessionSettings);

1 Like

Figured out the cause with our server rep - it’s the -multihome argument. Without it everything is good. I suppose with it the wrong IP gets reported to EOS. Maybe someone from Epic can chime in why this is so.
I can see ARK added a custom PublicIPForEpic argument, which was probably related to the same issue. ([Bug]: Ark: Survival Evolved should use separate IP for Multihome and EPIC · Issue #4238 · GameServerManagers/LinuxGSM · GitHub).

i wonder if it’s the nat hole punching that fails with it.