本文讨论了在异步 Rust 中使用 io_uring 时出现 TCP 连接泄漏的问题。作者通过一个示例演示了在使用 io_uring 驱动程序时,即使行为看起来相似,也会发生 TCP 连接泄漏,而使用 epoll 驱动程序则不会。这是因为 io_uring 驱动程序异步执行系统调用,而 epoll 驱动程序则在轮询期间执行系统调用。文章进一步解释了异步 Rust 的核心原语 Future 的工作原理,以及 io_uring 如何打破 Future 的一些核心假设,导致连接泄漏。最后,作者提出了两种解决方案:I/O 安全和 Halt 安全,并讨论了在 Rust 中实现这些安全机制的挑战。