RioSharp.RioTcpListener.AcceptIocpComplete C# (CSharp) Метод

AcceptIocpComplete() приватный Метод

private AcceptIocpComplete ( object o ) : void
o object
Результат void
        unsafe void AcceptIocpComplete(object o)
        {
            IntPtr lpNumberOfBytes;
            IntPtr lpCompletionKey;
            RioNativeOverlapped* lpOverlapped = stackalloc RioNativeOverlapped[1];

            while (true)
            {
                if (Kernel32.GetQueuedCompletionStatusRio(_listenIocp, out lpNumberOfBytes, out lpCompletionKey, out lpOverlapped, -1))
                {
                    var res = allSockets[lpOverlapped->SocketIndex];
                    activeSockets.TryAdd(res.GetHashCode(), res);
                    void* apa = _listenerSocket.ToPointer();
                    if (res.SetSocketOption(SOL_SOCKET_SocketOptions.SO_UPDATE_ACCEPT_CONTEXT, &apa, IntPtr.Size) != 0)
                        WinSock.ThrowLastWSAError();

                    res.SetInUse(true);
                    OnAccepted(res);
                }
                else
                {
                    var error = Marshal.GetLastWin32Error();
                    if (error == Kernel32.ERROR_ABANDONED_WAIT_0)
                        break;
                    else if (error == Kernel32.ERROR_NETNAME_DELETED)
                        BeginRecycle(allSockets[lpOverlapped->SocketIndex],false);
                    else
                        throw new Win32Exception(error);
                }
            }
        }