Example #1
0
 public void FinishAccept(byte[] buffer, int offset, int length, IPEndPoint remoteEndPoint, IPEndPoint localEndPoint)
 {
     Debug.Assert(length == 0);
     try
     {
         _ssl = new SslStream(_inputStream, true);
         _authenticateTask = _ssl.AuthenticateAsServerAsync(_serverParameters.Certificate, _serverParameters.ClientCertificateRequired, _serverParameters.Protocols, false).ContinueWith((t, selfObject) =>
         {
             var self = (SslTransportHandler)selfObject;
             if (t.IsFaulted || t.IsCanceled)
             {
                 self.Callback.StartDisconnect();
             }
             else
             {
                 _next.SetRemoteCertificate(_ssl.RemoteCertificate);
             }
         }, this);
         _next.FinishAccept(_recvBuffer, _recvOffset, 0, remoteEndPoint, localEndPoint);
     }
     catch (Exception)
     {
         Callback.StartDisconnect();
     }
 }
Example #2
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();
            }
        }
Example #3
0
        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);
            }
        }
Example #4
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();
        }