如何处理mio中的错误?

Posted

技术标签:

【中文标题】如何处理mio中的错误?【英文标题】:How to handle errors in mio? 【发布时间】:2016-10-09 09:58:05 【问题描述】:

我正在 mio 之上构建一个多线程异步 HTTP 服务器。

我应该如何处理客户端TcpStream 连接上的事件?

对于is_readable,这非常简单:我读取请求并写入响应。 对于其他类型我不确定。如果我得到is_erroris_hup,我应该shutdown() 流吗? is_none()呢?

【问题讨论】:

你见过this series by Herman J. Radtke吗?它在mio 中包含有关错误处理的有用信息。 谢谢,那篇文章很有趣。不幸的是,他很少谈论错误处理:) 【参考方案1】:

您提到的所有内容都具有非常精确的含义,并直接映射到 POSIX/BSD Socket API。由您决定。

is_hup on Read 表示对方挂断了它的发送方。这意味着它不会再向您发送任何内容。然而,它可能保持读取打开,您可能仍想向它发送一些数据。

shutdown 关闭 Reading/Writing/Both https://doc.rust-lang.org/std/net/enum.Shutdown.html ,所以你想做什么和什么时候做取决于你。

TcpStream 内部持有FileDesc,当你删除它时,close fd,所以如果你不手动shutdown,一切都会被关闭,只要你删除给定的@987654330 @来自用法。 https://github.com/rust-lang/rust/blob/master/src/libstd/sys/unix/fd.rs#L217

【讨论】:

以上是关于如何处理mio中的错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 VBA 中的 DLL 错误?

如何处理 NSPersistentContainer.loadPersistentStores 中的错误?

如何处理完成闭包中的多个错误

如何处理 Retrofit 2.0 中的错误

如何处理淘汰订阅中的错误

如何处理 swift 3 中的错误?