Exemple #1
0
 private void AcceptLoopProc()
 {
     while (svSocket != null && svSocket.IsBound && !disconnecting)
     {
         Socket clSocket;
         try
         { clSocket = svSocket.Accept(); }
         catch (SocketException) // Disconnect() called
         { break; }
         if (disconnecting)
         {
             break;
         }
         var rawStream = new NetworkStream(clSocket, false);
         var clParams  = new SocketClientParams(clSocket, rawStream.AsUnclosable());
         var allow     = true;
         OnNewClient(clParams, ref allow);
         if (allow)
         {
             var cl = CreateClient(clParams);
             newClients.Enqueue(cl);
         }
         else
         {
             clSocket.Shutdown(SocketShutdown.Both);
             clSocket.Close();
         }
     }
     Root.Log(LogLevel.Info, "Server: disconnected");
     if (semAcceptingThread.CurrentCount == 0)
     {
         semAcceptingThread.Release();
     }
 }
Exemple #2
0
        private void EndConnect(object sender, SocketAsyncEventArgs e)
        {
            var err = e.SocketError;

            e.Dispose();
            ConnectionResult cr;
            string           msg;

            if (err != SocketError.Success)
            {
                cr  = Core.ConnectionResult.Rejected;
                msg = NetUtil.GetSocketErrorDesc(err);
                Root.Log(LogLevel.Error, "Client: connection failed: " + msg);
                Reset();
            }
            else
            {
                cr  = Core.ConnectionResult.Accepted;
                msg = "Connection established";
                Root.Log(LogLevel.Info, "Client: connection established");
                ConnectionState = ConnectionState.Connected;
                rawNetStream    = new NetworkStream(clSocket);
                netStream       = rawNetStream.AsUnclosable();
            }
            OnConnectionResult(cr, msg);
        }