如何处理 mio 中的错误?
How to handle errors in mio?
我正在 mio 之上构建一个多线程异步 HTTP 服务器。
我应该如何处理客户端 TcpStream
连接上的事件?
- 对于
is_readable
这非常简单:我阅读请求并编写响应。
- 对于其他类型我不确定。如果我得到
is_error
或 is_hup
,我应该 shutdown()
流吗? is_none()
呢?
您提到的所有内容都具有非常精确的含义,并直接映射到 POSIX/BSD 套接字 API。由您决定。
is_hup
on Read 表示对方挂断了它是发送方。这意味着它不会再给你发送任何东西。然而,它可能使读数保持打开状态,您可能仍想向它发送一些数据。
shutdown
关闭 Reading/Writing/Both https://doc.rust-lang.org/std/net/enum.Shutdown.html ,所以由你决定什么时候做什么。
TcpStream
内部保存 FileDesc
并且当你放下它时 close
会 fd
,所以如果你不 shutdown
手动一切都会无论如何都会关闭,只要您从使用中删除 given TcpStream
。 https://github.com/rust-lang/rust/blob/master/src/libstd/sys/unix/fd.rs#L217
我正在 mio 之上构建一个多线程异步 HTTP 服务器。
我应该如何处理客户端 TcpStream
连接上的事件?
- 对于
is_readable
这非常简单:我阅读请求并编写响应。 - 对于其他类型我不确定。如果我得到
is_error
或is_hup
,我应该shutdown()
流吗?is_none()
呢?
您提到的所有内容都具有非常精确的含义,并直接映射到 POSIX/BSD 套接字 API。由您决定。
is_hup
on Read 表示对方挂断了它是发送方。这意味着它不会再给你发送任何东西。然而,它可能使读数保持打开状态,您可能仍想向它发送一些数据。
shutdown
关闭 Reading/Writing/Both https://doc.rust-lang.org/std/net/enum.Shutdown.html ,所以由你决定什么时候做什么。
TcpStream
内部保存 FileDesc
并且当你放下它时 close
会 fd
,所以如果你不 shutdown
手动一切都会无论如何都会关闭,只要您从使用中删除 given TcpStream
。 https://github.com/rust-lang/rust/blob/master/src/libstd/sys/unix/fd.rs#L217