Esempio n. 1
0
        private unsafe void Read(Ring ring, int ioVecs)
        {
            int socket = Socket;
            var vecs   = ReadVecs;

            if (ioVecs == 1 && HasCapability(ConnectionCapabilities.Recv))
            {
                if (!ring.TryPrepareRecv(socket, vecs->iov_base, vecs->iov_len, 0, AsyncOperation.ReadFrom(socket).AsUlong()))
                {
                    _scheduler.ScheduleRead(socket);
                    return;
                }
            }
            else
            {
                if (!ring.TryPrepareReadV(socket, vecs, ioVecs, 0, 0, AsyncOperation.ReadFrom(socket).AsUlong()))
                {
                    _scheduler.ScheduleRead(socket);
                    return;
                }
            }

            SetFlag(ConnectionState.Reading);
        }
 public void ScheduleRead(int socket)
 {
     _asyncOperationQueue.Enqueue(AsyncOperation.ReadFrom(socket));
 }
 public void ScheduleAsyncRead(int socket)
 {
     _asyncOperationQueue.Enqueue(AsyncOperation.ReadFrom(socket));
     _unblockHandle.UnblockIfRequired();
 }