Unity-Technologies / Unity-Technologies/multiplayer-community-contributions
Occasional error on disconnect (websockets)
Nobody has claimed this yet.
- Dominant language
- C#
- Stars
- 555
- Forks
- 197
- Avg merge
- 4d 12h
- Merged PRs (30d)
- 1
Description
Sometimes when the browser tab is closed a few error messages will be thrown on the server and then a repeating error message which hangs the server completely. Generally clients can disconnect perfectly fine but ~1/20 times this happens.

InvalidOperationException: The current state of the connection is not Open.
WebSocketSharp.WebSocket.Send (System.Byte[] data) (at Library/PackageCache/com.community.netcode.transport.websocket@858f6df327/Runtime/Libraries/websocket-sharp/websocket-sharp/WebSocket.cs:3370)
Netcode.Transports.WebSocket.WebSocketPeer.Send (System.Byte[] data) (at Library/PackageCache/com.community.netcode.transport.websocket@858f6df327/Runtime/WebSocketPeer.cs:25)
Netcode.Transports.WebSocket.WebSocketServerConnectionBehavior.Send (System.UInt64 clientId, System.ArraySegment`1[T] data) (at Library/PackageCache/com.community.netcode.transport.websocket@858f6df327/Runtime/WebSocketServerConnectionBehavior.cs:75)
Netcode.Transports.WebSocket.WebSocketTransport.Send (System.UInt64 clientId, System.ArraySegment`1[T] data, Unity.Netcode.NetworkDelivery delivery) (at Library/PackageCache/com.community.netcode.transport.websocket@858f6df327/Runtime/WebSocketTransport.cs:91)
Unity.Netcode.NetworkManager+NetworkManagerMessageSender.Send (System.UInt64 clientId, Unity.Netcode.NetworkDelivery delivery, Unity.Netcode.FastBufferWriter batchData) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:179)
Unity.Netcode.MessagingSystem.ProcessSendQueues () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Messaging/MessagingSystem.cs:768)
Unity.Netcode.NetworkManager.OnNetworkPostLateUpdate () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1641)
Unity.Netcode.NetworkManager.NetworkUpdate (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1538)
Unity.Netcode.NetworkUpdateLoop.RunNetworkUpdateStage (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:185)
Unity.Netcode.NetworkUpdateLoop+NetworkPostLateUpdate+<>c.<CreateLoopSystem>b__0_0 () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:268)
NullReferenceException: Object reference not set to an instance of an object
Unity.Netcode.FastBufferWriter.Dispose () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Serialization/FastBufferWriter.cs:121)
Unity.Netcode.MessagingSystem.CleanupDisconnectedClient (System.UInt64 clientId) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Messaging/MessagingSystem.cs:438)
Unity.Netcode.MessagingSystem.ClientDisconnected (System.UInt64 clientId) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Messaging/MessagingSystem.cs:429)
Unity.Netcode.NetworkManager.OnClientDisconnectFromServer (System.UInt64 clientId) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:2159)
Unity.Netcode.NetworkManager.HandleRawTransportPoll (Unity.Netcode.NetworkEvent networkEvent, System.UInt64 clientId, System.ArraySegment`1[T] payload, System.Single receiveTime) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1875)
Unity.Netcode.NetworkManager.OnNetworkEarlyUpdate () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1596)
Unity.Netcode.NetworkManager.NetworkUpdate (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1532)
Unity.Netcode.NetworkUpdateLoop.RunNetworkUpdateStage (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:185)
Unity.Netcode.NetworkUpdateLoop+NetworkEarlyUpdate+<>c.<CreateLoopSystem>b__0_0 () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:208)
This is the error message that loops and hangs the server:
NullReferenceException: Object reference not set to an instance of an object
Unity.Netcode.MessagingSystem.ProcessSendQueues () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Messaging/MessagingSystem.cs:756)
Unity.Netcode.NetworkManager.OnNetworkPostLateUpdate () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1641)
Unity.Netcode.NetworkManager.NetworkUpdate (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkManager.cs:1538)
Unity.Netcode.NetworkUpdateLoop.RunNetworkUpdateStage (Unity.Netcode.NetworkUpdateStage updateStage) (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:185)
Unity.Netcode.NetworkUpdateLoop+NetworkPostLateUpdate+<>c.<CreateLoopSystem>b__0_0 () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Core/NetworkUpdateLoop.cs:268)
Unity 2022.2.0b16
Netcode for GameObjects 1.2.0
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the browser-tab disconnect using the WebSocket transport, then inspect WebSocketPeer.cs, WebSocketServerConnectionBehavior.cs, WebSocketTransport.cs, and the MessagingSystem stack-trace locations. Done means the intermittent disconnect no longer produces repeated errors or hangs the server, while normal client disconnects continue to work.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp, unity
- Domain
- game-dev, networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100