public bool Connect() { pooledSocketsLock.EnterWriteLock(); try { if (connected) { return(true); } connected = true; IList <PooledSocket> tempPools = new List <PooledSocket>(poolSize); for (var i = 0; i < pooledSockets.Count; i++) { try { if (pooledSockets[i] != null && pooledSockets[i].Connected) { tempPools.Add(pooledSockets[i]); } else { pooledSockets[i].Close(); } } catch { } } pooledSockets.Clear(); pooledSockets = tempPools; for (int i = 0; i < poolSize; i++) { if (tempPools.Count >= poolSize) { break; } PooledSocket pooledSocket = PooledSocket.CreateNewSocket(endpoint, this, formatter); if (pooledSocket != null) { pooledSockets.Add(pooledSocket); } else { connected = false; break; } } return(connected); } finally { pooledSocketsLock.ExitWriteLock(); } }
internal void AddNewPooledSocket(Socket socket) { pooledSocketsLock.EnterWriteLock(); try { pooledSockets.Add(PooledSocket.CreateNewSocket(socket, this, formatter)); } finally { pooledSocketsLock.ExitWriteLock(); } }
internal SocketPool(ServiceContainer container, Socket socket) { formatter = new TotalFormatter(1000); container.Pool = this; connected = true; poolSize = 1; this.container = container; endpoint = socket.RemoteEndPoint; NetworkListener = new NetworkListner(); waitingCallback = new Dictionary <long, WaitCallback>(); waitingContext = new Dictionary <long, object>(); waitingCallbackLock = new ReaderWriterLockSlim(); waitHandles = new Dictionary <long, SynchResult>(); waitHandlesLock = new ReaderWriterLockSlim(); pooledSocketsLock = new ReaderWriterLockSlim(); pooledSockets = new List <PooledSocket>(poolSize) { PooledSocket.CreateNewSocket(socket, this, formatter) }; }