public static void QueueDisconnect(this Socket socket, SocketDisconnectTask task) { if (socket == null) { throw new ArgumentNullException("socket", "socket cannot be null"); } task.Socket = socket; task.Exception = null; IO.QueueDisconnect(task); }
public void Disconnect(Object state) { if (!disconnected) { disconnected = true; monitor.Stop(); SocketDisconnectTask task = new SocketDisconnectTask(); task.UserToken = state; task.Completed += OnDisconnected; socket.QueueDisconnect(task); } }
private void ExecuteDisconnect() { IOBuffer args = null; SocketDisconnectTask task = null; lock (discPool) lock (discQueue) { if (discPool.Count == 0 || discQueue.Count == 0) { return; } args = discPool.Pop(); task = discQueue.Dequeue(); task.Execute(args); } }
public void QueueDisconnect(SocketDisconnectTask task) { lock (discQueue) discQueue.Enqueue(task); }