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(); } }
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); }