コード例 #1
0
        private KernelResult AcceptSession(int portHandle, out int sessionHandle)
        {
            sessionHandle = 0;

            KProcess currentProcess = _system.Scheduler.GetCurrentProcess();

            KServerPort serverPort = currentProcess.HandleTable.GetObject <KServerPort>(portHandle);

            if (serverPort == null)
            {
                return(KernelResult.InvalidHandle);
            }

            KernelResult result = currentProcess.HandleTable.ReserveHandle(out int handle);

            if (result != KernelResult.Success)
            {
                return(result);
            }

            KAutoObject session;

            if (serverPort.IsLight)
            {
                session = serverPort.AcceptIncomingLightConnection();
            }
            else
            {
                session = serverPort.AcceptIncomingConnection();
            }

            if (session != null)
            {
                currentProcess.HandleTable.SetReservedHandleObj(handle, session);

                session.DecrementReferenceCount();

                sessionHandle = handle;

                result = KernelResult.Success;
            }
            else
            {
                currentProcess.HandleTable.CancelHandleReservation(handle);

                result = KernelResult.NotFound;
            }

            return(result);
        }
コード例 #2
0
ファイル: KPort.cs プロジェクト: zhubaojian/Ryujinx
 public KPort(Horizon System) : base(System)
 {
     ServerPort = new KServerPort(System);
     ClientPort = new KClientPort(System);
 }