void ProcessAccept() { int oldState, newState; do { oldState = _state; newState = oldState & ~(int)State.Receive; } while (Interlocked.CompareExchange(ref _state, newState, oldState) != oldState); var bytesTransfered = _receiveEvent.BytesTransferred; var socketError = _receiveEvent.SocketError; if (bytesTransfered >= 0 && socketError == SocketError.Success) { _socket = _receiveEvent.AcceptSocket; _server.ReportNewConnectedClient(); _handler.FinishAccept(_receiveEvent.Buffer, _receiveEvent.Offset, bytesTransfered, _socket.RemoteEndPoint as IPEndPoint, _socket.LocalEndPoint as IPEndPoint); } else { // Current socket could be corrupted Windows returns InvalidArguments nonsense. RecreateSaeas(); _handler.PrepareAccept(); } }
void ProcessAccept() { int oldState, newState; do { oldState = _state; newState = oldState & ~(int)State.Receive; } while (Interlocked.CompareExchange(ref _state, newState, oldState) != oldState); _server.ReportNewConnectedClient(); _socket = _receiveEvent.AcceptSocket; if (_receiveEvent.BytesTransferred >= 0 && _receiveEvent.SocketError == SocketError.Success) { _handler.FinishAccept(_receiveEvent.Buffer, _receiveEvent.Offset, _receiveEvent.BytesTransferred, _socket.RemoteEndPoint as IPEndPoint, _socket.LocalEndPoint as IPEndPoint); } }
void ProcessAccept() { int oldState, newState; do { oldState = _state; newState = oldState & ~(int)State.Receive; } while (Interlocked.CompareExchange(ref _state, newState, oldState) != oldState); var bytesTransfered = _acceptEvent.BytesTransferred; var socketError = _acceptEvent.SocketError; if (bytesTransfered >= 0 && socketError == SocketError.Success) { _socket = _acceptEvent.AcceptSocket; IPEndPoint remoteEndpoint = null; IPEndPoint localEndpoint = null; try { remoteEndpoint = _socket.RemoteEndPoint as IPEndPoint; localEndpoint = _socket.LocalEndPoint as IPEndPoint; } catch (SocketException) //"The socket is not connected" is intentionally ignored { } if (remoteEndpoint != null && localEndpoint != null) { _server.ReportNewConnectedClient(); _handler.FinishAccept(_acceptEvent.Buffer, _acceptEvent.Offset, bytesTransfered, remoteEndpoint, localEndpoint); return; } } // Current socket could be corrupted Windows returns InvalidArguments nonsense. RecreateSaeas(); _handler.PrepareAccept(); }