public void Close(Ring ring) { int socket = Socket; if (ring.Supports(RingOperation.Close)) { if (!ring.TryPrepareClose(socket, AsyncOperation.CloseConnection(socket).AsUlong())) { _scheduler.ScheduleCloseConnection(socket); } } else { if (ring.TryPrepareNop(AsyncOperation.CloseConnection(socket).AsUlong())) { Socket.Close(); // pre v5.6 } else { _scheduler.ScheduleCloseConnection(socket); } } }
public void ScheduleCloseConnection(int socket) { _asyncOperationQueue.Enqueue(AsyncOperation.CloseConnection(socket)); }