ReportNewConnectedClient() private method

private ReportNewConnectedClient ( ) : void
return void
コード例 #1
0
        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();
            }
        }
コード例 #2
0
ファイル: SaeaLayerCallback.cs プロジェクト: tonyozr/Nowin
        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);
            }
        }
コード例 #3
0
        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();
        }