Skip to content

Bug: Disconnecting connections aren't cleared on transport shutdown #1044

@Vanit

Description

@Vanit

Unity version: 6000.3.14f1
Fishnet: 4.7.2R Pro

I ran into this as it produces an error log on the server. It looks to be harmless but may warrant further investigation into possible side effects.

Basically this can be reproduced by:

  • Host starts tugboat + multipass connections as server (presumably occurs works with any transport)
  • Register a callback on InstanceFinder.ServerManager.OnRemoteConnectionState that shuts down multipass when args.ConnectionState == RemoteConnectionState.Stopped
  • Have an authenticator fail a joining client, which disconnects it and invokes the above callback
    • In the ServerManager it calls Disconnect(false) on the connection when auth fails
  • Start the transports again
  • Receive logged error

Happy to provide more context on request, but the issue is pretty self-evident when you look at the source code; _disconnectingClients is never cleared by the TransportManager, so when the server connection is started again it tries to keep disconnecting connections from the last session, which produces this trace:

TransportIdData could not be found for Multipass connectionId of -1.
UnityEngine.Debug:LogError (object)
FishNet.Managing.Logging.LevelLoggingConfiguration:LogError (string) (at Assets/FishNet/Runtime/Managing/Logging/LevelLoggingConfiguration.cs:148)
FishNet.Managing.NetworkManager:InternalLogError (string) (at Assets/FishNet/Runtime/Managing/NetworkManager.Logging.cs:82)
FishNet.Managing.NetworkManagerExtensions:LogError (FishNet.Managing.NetworkManager,string) (at Assets/FishNet/Runtime/Managing/NetworkManager.Logging.cs:140)
FishNet.Transporting.Multipass.Multipass:GetDataFromMultipassId (int) (at Assets/FishNet/Runtime/Transporting/Transports/Multipass/Multipass.cs:229)
FishNet.Transporting.Multipass.Multipass:StopClient (int,bool) (at Assets/FishNet/Runtime/Transporting/Transports/Multipass/Multipass.cs:1019)
FishNet.Transporting.Multipass.Multipass:StopConnection (int,bool) (at Assets/FishNet/Runtime/Transporting/Transports/Multipass/Multipass.cs:929)
FishNet.Managing.Transporting.TransportManager:<IterateOutgoing>g__SendAsServer|76_0 (FishNet.Managing.Transporting.TransportManager/<>c__DisplayClass76_0&) (at Assets/FishNet/Runtime/Managing/Transporting/TransportManager.cs:736)
FishNet.Managing.Transporting.TransportManager:IterateOutgoing (bool) (at Assets/FishNet/Runtime/Managing/Transporting/TransportManager.cs:656)
FishNet.Managing.Timing.TimeManager:TryIterateData (bool) (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:1120)
FishNet.Managing.Timing.TimeManager:IncreaseTick () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:767)
FishNet.Managing.Timing.TimeManager:<TickUpdate>g__MethodLogic|113_0 () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:393)
FishNet.Managing.Timing.TimeManager:TickUpdate () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:381)
FishNet.Transporting.NetworkReaderLoop:Update () (at Assets/FishNet/Runtime/Transporting/NetworkReaderLoop.cs:29)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions