private ReportDisconnectedClient ( ) : void | ||
Résultat | void |
void ProcessDisconnect() { int oldState, newState; do { oldState = _state; newState = (oldState & ~(int)(State.Disconnect | State.Aborting)); } while (Interlocked.CompareExchange(ref _state, newState, oldState) != oldState); _socket = null; _server.ReportDisconnectedClient(); _handler.PrepareAccept(); }
void ProcessDisconnect() { bool delayedAccept; int oldState, newState; do { oldState = _state; delayedAccept = (oldState & (int)State.Receive) != 0; newState = (oldState & ~(int)(State.Disconnect | State.Aborting)) | (delayedAccept ? (int)State.DelayedAccept : 0); } while (Interlocked.CompareExchange(ref _state, newState, oldState) != oldState); _socket = null; _server.ReportDisconnectedClient(); if (!delayedAccept) { _handler.PrepareAccept(); } }
void ProcessDisconnect() { bool delayedAccept; int oldState, newState; do { oldState = _state; delayedAccept = (oldState & (int)State.Receive) != 0; newState = (oldState & ~(int)State.Disconnect) | (delayedAccept ? (int)State.DelayedAccept : 0); } while (Interlocked.CompareExchange(ref _state, newState, oldState) != oldState); if (!RuntimeCorrectlyImplementsDisconnectReuseSocket) { _acceptEvent.AcceptSocket = null; _socket.Close(); _socket.Dispose(); } _socket = null; _server.ReportDisconnectedClient(); if (!delayedAccept) { _handler.PrepareAccept(); } }