public override bool Start() { try { int bufferSize = AppServer.Config.ReceiveBufferSize; if (bufferSize <= 0) bufferSize = 1024 * 4; m_BufferManager = new BufferManager(bufferSize * AppServer.Config.MaxConnectionNumber, bufferSize); try { m_BufferManager.InitBuffer(); } catch (Exception e) { AppServer.Logger.Error("Failed to allocate buffer for async socket communication, may because there is no enough memory, please decrease maxConnectionNumber in configuration!", e); return false; } // preallocate pool of SocketAsyncEventArgs objects SocketAsyncEventArgs socketEventArg; var socketArgsProxyList = new List<SocketAsyncEventArgsProxy>(AppServer.Config.MaxConnectionNumber); for (int i = 0; i < AppServer.Config.MaxConnectionNumber; i++) { //Pre-allocate a set of reusable SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs(); m_BufferManager.SetBuffer(socketEventArg); socketArgsProxyList.Add(new SocketAsyncEventArgsProxy(socketEventArg)); } m_ReadWritePool = new ConcurrentStack<SocketAsyncEventArgsProxy>(socketArgsProxyList); if (!base.Start()) return false; IsRunning = true; return true; } catch (Exception e) { AppServer.Logger.Error(e); return false; } }
public override void Stop() { if (IsStopped) return; lock (SyncRoot) { if (IsStopped) return; base.Stop(); if (m_ReadWritePool != null) m_ReadWritePool = null; if (m_BufferManager != null) m_BufferManager = null; IsRunning = false; } }
public override void Stop() { if (IsStopped) return; lock (SyncRoot) { if (IsStopped) return; base.Stop(); foreach (var item in m_ReadWritePool) item.SocketEventArgs.Dispose(); m_ReadWritePool = null; m_BufferManager = null; IsRunning = false; } }