GetNetMode and IsNetMode always return NM_ListenServer

To determine what features a player is exposed to, I set a boolean for whether the player is the host:
The game mode queries the player controllers and sets said bool by querying IsNetMode(NM_ListenServer) (Similar to GetNetMode() == ENetMode::NM_ListenServer).

One client hosts with /Game/Maps/MyLevel?listen and another client joins with param as I’m testing locally, so e.g: "UE4Editor.exe MyProject.uproject -game -log".

The first client correctly returns NM_ListenServer, however the second client is not an NM_Client, it’s also a NM_ListenServer when calling IsNetMode.

When calling AMyPlayerController::HasAuthority from my game mode, it seems to return TRUE for both clients as well. Note: this was called on a player controller queried from GetWorld()->GetPlayerControllerIterator().

Any suggestion is much appreciated!

The code called is most likely in /Runtime/Engine/Private/NetworkDriver.cpp


ENetMode UNetDriver::GetNetMode() const
	// Special case for PIE - forcing dedicated server behavior
	if (World && World->WorldType == EWorldType::PIE && IsServer())
		if ( GEngine->GetWorldContextFromWorldChecked(World).RunAsDedicated )
			return NM_DedicatedServer;

	// Normal
	return (IsServer() ? (GIsClient ? NM_ListenServer : NM_DedicatedServer) : NM_Client);

It is likely that my client returns TRUE for IsServer(), which would explain why it’s always NM_ListenServer, as it definitely isn’t ran as a dedicated server with -server param or similar.