internal void Close(WebSocketCloseReasons reason) { try { if (Interlocked.CompareExchange(ref _isClosed, 1, 0) == 1) { return; } ((UInt16)reason).ToBytesBackwards(_closeBuffer.Array, _closeBuffer.Offset); WriteInternal(_closeBuffer, 2, true, false, WebSocketFrameOption.ConnectionClose, WebSocketExtensionFlags.None); _clientStream.Close(); } catch { } }
internal void Close(WebSocketCloseReasons reason) { try { if (Interlocked.CompareExchange(ref _isClosed, 1, 0) == 1) { return; } ((ushort)reason).ToBytesBackwards(_closeBuffer.Array, _closeBuffer.Offset); WriteInternal(_closeBuffer, 2, true, false, WebSocketFrameOption.ConnectionClose, WebSocketExtensionFlags.None); _clientStream.Close(); } catch (Exception ex) { Debug.Fail("WebSocketConnectionRfc6455.Close: " + ex.Message); } }
internal void Close(WebSocketCloseReasons reason) { try { if (Interlocked.CompareExchange(ref _isClosed, 1, 0) == 1) { return; } ((UInt16)reason).ToBytesBackwards(_closeBuffer.Array, _closeBuffer.Offset); WriteInternal(_closeBuffer, 2, true, false, WebSocketFrameOption.ConnectionClose, WebSocketExtensionFlags.None); #if (NET45 || NET451 || NET452 || NET46) _clientStream.Close(); #endif } catch (Exception ex) { DebugLog.Fail("WebSocketConnectionRfc6455.Close", ex); } }
public async Task CloseAsync(WebSocketCloseReasons reason) { if (Interlocked.CompareExchange(ref this.closeState, CLOSE_STATE_CLOSED, CLOSE_STATE_OPEN) != CLOSE_STATE_OPEN) { return; } await this.writeSemaphore.WaitAsync().ConfigureAwait(false); try { ((ushort)reason).ToBytesBackwards(this.closeBuffer.Array, this.closeBuffer.Offset); var messageType = (WebSocketMessageType)WebSocketFrameOption.ConnectionClose; var closeFrame = this.PrepareFrame(this.closeBuffer, 2, true, false, messageType, WebSocketExtensionFlags.None); await this.SendFrameAsync(closeFrame, Timeout.InfiniteTimeSpan, SendOptions.NoLock | SendOptions.NoErrors | SendOptions.IgnoreClose, CancellationToken.None).ConfigureAwait(false); await this.networkConnection.FlushAsync(CancellationToken.None).ConfigureAwait(false); await this.networkConnection.CloseAsync().ConfigureAwait(false); } catch (Exception closeError) when(closeError.Unwrap() is ThreadAbortException == false) { var closeErrorUnwrap = closeError.Unwrap(); if (closeErrorUnwrap is IOException || closeErrorUnwrap is OperationCanceledException || closeErrorUnwrap is InvalidOperationException) { return; // ignore common IO exceptions while closing connection } if (this.log.IsDebugEnabled) { this.log.Debug($"({this.GetHashCode():X}) An error occurred while closing connection.", closeError.Unwrap()); } } finally { SafeEnd.ReleaseSemaphore(this.writeSemaphore, this.log); } }
private void Close(WebSocketCloseReasons reason) { try { if (Interlocked.CompareExchange(ref _isClosed,1,0) == 1) return; ((Int16)reason).ToBytesBackwards(_closeBuffer.Array, _closeBuffer.Offset); WriteInternal(_closeBuffer, 2, true, false, WebSocketFrameOption.ConnectionClose, WebSocketExtensionFlags.None); _clientStream.Close(); } catch { } }
private void Close(WebSocketCloseReasons reason) { try { if (_isClosed) return; _isClosed = true; ((UInt16)reason).ToBytes(_closeBuffer.Array, _controlBuffer.Offset); WriteInternal(_closeBuffer, 2, true, false, WebSocketFrameOption.ConnectionClose, WebSocketExtensionFlags.None); _clientStream.Close(); } catch { } }
internal void Close(WebSocketCloseReasons reason) { try { if (Interlocked.CompareExchange(ref _isClosed,1,0) == 1) return; ((UInt16)reason).ToBytesBackwards(_closeBuffer.Array, _closeBuffer.Offset); WriteInternal(_closeBuffer, 2, true, false, WebSocketFrameOption.ConnectionClose, WebSocketExtensionFlags.None); _clientStream.Close(); } catch (Exception ex) { DebugLog.Fail("WebSocketConnectionRfc6455.Close", ex); } }