private void runListener() { while (m_isOpen && m_port >= 0) { try { if (listener.Pending()) { TcpClient socket = listener.AcceptTcpClient(); TcpServerConnection conn = new TcpServerConnection(socket, m_encoding); if (OnConnect != null) { lock (activeThreadsLock) { activeThreads++; } conn.CallbackThread = new Thread(() => { OnConnect(conn); }); conn.CallbackThread.Start(); } lock (connections) { connections.Add(conn); } } else { System.Threading.Thread.Sleep(m_idleTime); } } catch (ThreadInterruptedException) { } //thread is interrupted when we quit catch (Exception e) { if (m_isOpen && OnError != null) { OnError(this, e); } } } }
private bool processConnection(TcpServerConnection conn) { bool moreWork = false; if (conn.processOutgoing(m_maxSendAttempts)) { moreWork = true; } if (OnDataAvailable != null && activeThreads < m_maxCallbackThreads && conn.Socket.Available > 0) { lock (activeThreadsLock) { activeThreads++; } conn.CallbackThread = new Thread(() => { OnDataAvailable(conn); }); conn.CallbackThread.Start(); Thread.Yield(); } return(moreWork); }