예제 #1
0
        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));
 }