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