2016-10-09 52 views
1

我正在mio上構建一個多線程的異步HTTP服務器。如何處理mio中的錯誤?

我應該如何處理客戶端TcpStream連接上的事件?

  • 對於is_readable這很簡單:我讀取請求並寫入響應。
  • 對於其他種類我不確定。我應該shutdown()流如果我得到is_erroris_hup?那麼is_none()
+2

你見過[Herman J. Radtke的這個系列](http://hermanradtke.com/2015/07/12/my-basic-understanding-of-mio-and-async-io.html)嗎?它包含有關'mio'中錯誤處理的有用信息。 – ljedrz

+0

謝謝,那篇文章很有趣。不幸的是,他不談論錯誤處理太多:) – ElefEnt

回答

1

你提到的所有東西都有非常精確的含義,並直接映射到POSIX/BSD套接字API。這取決於你自己決定。

is_hup on閱讀意味着對方掛起它的發送方。這意味着它不會再給你任何東西。不過,它可能會保持閱讀的開放性,並且您可能仍然希望向其發送一些數據。

shutdown關閉閱讀/書寫/ https://doc.rust-lang.org/std/net/enum.Shutdown.html,所以這取決於你什麼時候想做什麼。

TcpStream內部保存FileDesc,當你刪除它,將closefd,所以如果你不shutdown手動,一切都會反正只要您刪除給出從使用TcpStream關閉。 https://github.com/rust-lang/rust/blob/master/src/libstd/sys/unix/fd.rs#L217