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(); }