MindTouch.Clacks.Client.Net.ConnectionPool.ReapSockets C# (CSharp) 메소드

ReapSockets() 개인적인 메소드

private ReapSockets ( object state ) : void
state object
리턴 void
        private void ReapSockets(object state) {
            lock(_syncroot) {
                var disposed = (from busy in _busySockets where busy.Key.IsDisposed select busy.Key).ToArray();
                foreach(var socket in disposed) {
                    _busySockets.Remove(socket);
                }
                var staleTime = DateTime.UtcNow.Subtract(IdleTimeout);
                var dead = 0;
                while(true) {

                    // check oldest (first in available list) for staleness
                    if(!_availableSockets.Any() || _availableSockets[0].Queued > staleTime) {
                        break;
                    }
                    var idle = _availableSockets[0];
                    _availableSockets.RemoveAt(0);
                    idle.Socket.Dispose();
                    dead++;
                }
                _log.DebugFormat("reaped {4} disposed and & {5} dead sockets (max: {0}, available: {1}, busy: {2}, queued: {3})",
                    MaxConnections,
                    _availableSockets.Count,
                    _busySockets.Count,
                    _waitingQueue.Count,
                    disposed.Length,
                    dead
                );
            }
        }