Exemplo n.º 1
0
        /// <summary>
        /// Return the given socket back to the socket pool.
        /// </summary>
        /// <param name="socket">Socket connection to return.</param>
        public static void PutSocket(CustomTcpClient socket)
        {
            lock (availableSockets)
            {
                TimeSpan socketLifeTime = DateTime.Now.Subtract(socket.TimeCreated);

                if (TcpConnectionPool.availableSockets.Count < TcpConnectionPool.POOL_MAX_SIZE && socketLifeTime.Minutes < SOCKET_LIFE_TIME_AS_MINUTE)
                {
                    if (socket != null)
                    {
                        if (socket.Connected)
                        {
                            TcpConnectionPool.availableSockets.Enqueue(socket);
                        }
                        else
                        {
                            DisposeSocket(socket);
                        }
                    }
                }
                else
                {
                    DisposeSocket(socket);
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Initialize host Connection pool
        /// </summary>
        /// <param name="hostIP">host IP Address</param>
        /// <param name="hostPort">host Port</param>
        /// <param name="minConnections">Initial number of connections</param>
        /// <param name="maxConnections">The maximum size of the connection pool</param>
        public static void InitializeConnectionPool(string hostIPAddress, int hostPortNumber, int minConnections, int maxConnections, int socketLifeTimeAsMinute = 15)
        {
            POOL_MAX_SIZE = maxConnections;
            POOL_MIN_SIZE = minConnections;
            hostIP        = hostIPAddress;
            hostPort      = hostPortNumber;
            SOCKET_LIFE_TIME_AS_MINUTE = socketLifeTimeAsMinute;
            availableSockets           = new Queue <CustomTcpClient>();

            for (int i = 0; i < minConnections; i++)
            {
                CustomTcpClient cachedSocket = OpenSocket();
                PutSocket(cachedSocket);
            }

            Initialized = true;
        }
Exemplo n.º 3
0
 private static void DisposeSocket(CustomTcpClient socket)
 {
     socket.Close();
     socket.Dispose();
     TcpConnectionPool.availableSockets.Enqueue(OpenSocket());
 }