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); }
public KPort(Horizon System) : base(System) { ServerPort = new KServerPort(System); ClientPort = new KClientPort(System); }