Florian Hockmann created TINKERPOP-2026:
-------------------------------------------

             Summary: Gremlin.Net.Driver should check ClientWebSocket.State 
before closing
                 Key: TINKERPOP-2026
                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2026
             Project: TinkerPop
          Issue Type: Improvement
            Reporter: Florian Hockmann


User [~samimajed] described in a comment for TINKERPOP-2019 a situation where 
the Gremlin.Net.Driver tries to close a {{ClientWebSocket}} which fails because 
it was apparently already closed:
{code}
System.Net.WebSockets.WebSocketException:
at System.Net.WebSockets.WebSocketValidate.ThrowIfInvalidState 
(System.Net.WebSockets.Client, Version=4.1.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a)
at System.Net.WebSockets.WinHttpWebSocketState.InterlockedCheckAndUpdateState 
(System.Net.WebSockets.Client, Version=4.1.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a)
at System.Net.WebSockets.WinHttpWebSocket+<CloseAsync>d__30.MoveNext 
(System.Net.WebSockets.Client, Version=4.1.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a)
[...]
at Gremlin.Net.Driver.WebSocketConnection+<CloseAsync>d__4.MoveNext 
(Gremlin.Net, Version=3.3.0.0, Culture=neutral, PublicKeyToken=d2035e9aa387a711)
[...]
{code}

Gremlin.Net should check the state of the {{ClientWebSocket}} before trying to 
close it as the server could have already closed the connection.

[The implementation for this in 
SignalR|https://github.com/SignalR/SignalR/blob/1fba14fa3437e24c204dfaf8a18db3fce8acad3c/src/Microsoft.AspNet.SignalR.Core/Owin/WebSockets/WebSocketHandler.cs#L92]
 could be a good starting point as it uses the same underlying WebSocket 
implementation.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to