diff --git a/src/Ryujinx.HLE/HOS/Services/ServerBase.cs b/src/Ryujinx.HLE/HOS/Services/ServerBase.cs
index e892d6ab..b484a768 100644
--- a/src/Ryujinx.HLE/HOS/Services/ServerBase.cs
+++ b/src/Ryujinx.HLE/HOS/Services/ServerBase.cs
@@ -287,6 +287,10 @@ namespace Ryujinx.HLE.HOS.Services
                             _wakeEvent.WritableEvent.Clear();
                         }
                     }
+                    else if (rc == KernelResult.PortRemoteClosed && signaledIndex >= 0)
+                    {
+                        DestroySession(handles[signaledIndex]);
+                    }
 
                     _selfProcess.CpuMemory.Write(messagePtr + 0x0, 0);
                     _selfProcess.CpuMemory.Write(messagePtr + 0x4, 2 << 10);
@@ -299,6 +303,16 @@ namespace Ryujinx.HLE.HOS.Services
             Dispose();
         }
 
+        private void DestroySession(int serverSessionHandle)
+        {
+            _context.Syscall.CloseHandle(serverSessionHandle);
+
+            if (RemoveSessionObj(serverSessionHandle, out var session))
+            {
+                (session as IDisposable)?.Dispose();
+            }
+        }
+
         private bool Process(int serverSessionHandle, ulong recvListAddr)
         {
             IpcMessage request = ReadRequest();
@@ -360,7 +374,7 @@ namespace Ryujinx.HLE.HOS.Services
                 response.RawData = _responseDataStream.ToArray();
             }
             else if (request.Type == IpcMessageType.CmifControl ||
-                        request.Type == IpcMessageType.CmifControlWithContext)
+                     request.Type == IpcMessageType.CmifControlWithContext)
             {
 #pragma warning disable IDE0059 // Remove unnecessary value assignment
                 uint magic = (uint)_requestDataReader.ReadUInt64();
@@ -412,11 +426,7 @@ namespace Ryujinx.HLE.HOS.Services
             }
             else if (request.Type == IpcMessageType.CmifCloseSession || request.Type == IpcMessageType.TipcCloseSession)
             {
-                _context.Syscall.CloseHandle(serverSessionHandle);
-                if (RemoveSessionObj(serverSessionHandle, out var session))
-                {
-                    (session as IDisposable)?.Dispose();
-                }
+                DestroySession(serverSessionHandle);
                 shouldReply = false;
             }
             // If the type is past 0xF, we are using TIPC