System.Net.Sockets.SocketPal.SelectViaPoll C# (CSharp) Метод

SelectViaPoll() приватный статический Метод

private static SelectViaPoll ( IList checkRead, int checkReadInitialCount, IList checkWrite, int checkWriteInitialCount, IList checkError, int checkErrorInitialCount, System.Net.Interop events, int eventsLength, int microseconds ) : SocketError
checkRead IList
checkReadInitialCount int
checkWrite IList
checkWriteInitialCount int
checkError IList
checkErrorInitialCount int
events System.Net.Interop
eventsLength int
microseconds int
Результат SocketError
        private static unsafe SocketError SelectViaPoll(
            IList checkRead, int checkReadInitialCount,
            IList checkWrite, int checkWriteInitialCount,
            IList checkError, int checkErrorInitialCount,
            Interop.Sys.PollEvent* events, int eventsLength,
            int microseconds)
        {
            // Add each of the list's contents to the events array 
            Debug.Assert(eventsLength == checkReadInitialCount + checkWriteInitialCount + checkErrorInitialCount, "Invalid eventsLength");
            int offset = 0;
            AddToPollArray(events, eventsLength, checkRead, ref offset, Interop.Sys.PollEvents.POLLIN | Interop.Sys.PollEvents.POLLHUP);
            AddToPollArray(events, eventsLength, checkWrite, ref offset, Interop.Sys.PollEvents.POLLOUT);
            AddToPollArray(events, eventsLength, checkError, ref offset, Interop.Sys.PollEvents.POLLPRI);
            Debug.Assert(offset == eventsLength, $"Invalid adds. offset={offset}, eventsLength={eventsLength}.");

            // Do the poll
            uint triggered = 0;
            int milliseconds = microseconds == -1 ? -1 : microseconds / 1000;
            Interop.Error err = Interop.Sys.Poll(events, (uint)eventsLength, milliseconds, &triggered);
            if (err != Interop.Error.SUCCESS)
            {
                return GetSocketErrorForErrorCode(err);
            }

            // Remove from the lists any entries which weren't set
            if (triggered == 0)
            {
                checkRead?.Clear();
                checkWrite?.Clear();
                checkError?.Clear();
            }
            else
            {
                FilterPollList(checkRead, events, checkReadInitialCount - 1, Interop.Sys.PollEvents.POLLIN | Interop.Sys.PollEvents.POLLHUP);
                FilterPollList(checkWrite, events, checkWriteInitialCount + checkReadInitialCount - 1, Interop.Sys.PollEvents.POLLOUT);
                FilterPollList(checkError, events, checkErrorInitialCount + checkWriteInitialCount + checkReadInitialCount - 1, Interop.Sys.PollEvents.POLLERR | Interop.Sys.PollEvents.POLLPRI);
            }
            return SocketError.Success;
        }