コード例 #1
0
        public Task Start()
        {
            return(Task.Run(() =>
            {
                try
                {
                    // Set connection id and increment the connections count.
                    connectionId = connectionsCount++;

                    logger.WriteTransportLine(String.Format(
                                                  "Connected from {0} (counter: {1})\r\n",
                                                  clientSocket.RemoteEndPoint,
                                                  connectionId));

                    // This makes whatever you write in the stream is sent immediately.
                    clientSocket.NoDelay = true;

                    using (networkStream = new NetworkStream(clientSocket))
                    {
                        AcceptCore();
                    }
                }
                catch (Exception ex)
                {
                    logger.WriteErrorLine(ex.Message);
                }
                finally
                {
                    logger.WriteTransportLine(String.Format(
                                                  "Disconnected ({0}). Served {1} requests.",
                                                  connectionId,
                                                  requestsCount));
                    clientSocket.Close();

                    if (removeConnection != null)
                    {
                        removeConnection(this);
                    }
                }
            }));
        }
コード例 #2
0
ファイル: HeySslServer.cs プロジェクト: bluetsys/HeyHttp
        private static void OnAccept(IAsyncResult asyncResult)
        {
            HeyLogger logger         = new HeyLogger();
            Socket    socketListener = asyncResult.AsyncState as Socket;
            SslStream sslStream      = null;
            string    clientName     = null;

            try
            {
                using (Socket clientSocket = socketListener.EndAccept(asyncResult))
                {
                    socketListener.BeginAccept(OnAccept, socketListener);

                    clientName = clientSocket.RemoteEndPoint.ToString();
                    logger.WriteTransportLine(String.Format("Client connected from {0}\r\n", clientName));

                    NetworkStream networkStream = new NetworkStream(clientSocket);

                    // Plain connection before upgrading to SSL?
                    //message = ReadMessage(networkStream);
                    //Console.WriteLine(message);

                    RemoteCertificateValidationCallback callback = null;
                    if (settings.ClientCertificateRequired)
                    {
                        callback = new RemoteCertificateValidationCallback(ValidateClientCertificate);
                    }

                    sslStream = new SslStream(
                        networkStream,
                        false,
                        callback,
                        null);

                    sslStream.AuthenticateAsServer(
                        serverCertificate,
                        settings.ClientCertificateRequired,
                        SslProtocols.Default,
                        false);

                    switch (settings.Protocol)
                    {
                    case ApplicationLayerProtocol.Http:
                        DoHttp(logger, sslStream, clientSocket);
                        break;

                    case ApplicationLayerProtocol.Ws:
                        DoWs(logger, sslStream, clientSocket);
                        break;

                    default:
                        DoUndefined(sslStream);
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                logger.WriteErrorLine(ex.Message);
            }
            finally
            {
                logger.WriteTransportLine(String.Format("Disconnected from {0}\r\n", clientName));

                if (sslStream != null)
                {
                    SslClientCertificateInfo.Remove(sslStream.GetHashCode());
                }
            }
        }