Как обрабатывать ошибки в мио?
Я строю многопоточный асинхронный HTTP-сервер поверх MIO.
Как я должен обрабатывать события на клиенте TcpStream
соединения?
- За
is_readable
это довольно просто: я читаю запрос и пишу ответ. - Для других видов я не уверен. Нужно ли мне
shutdown()
поток, если я получуis_error
или жеis_hup
? Как насчетis_none()
?
1 ответ
Все вещи, которые вы упоминаете, имеют очень точное значение и отображаются непосредственно в POSIX/BSD Socket API. Тебе решать.
is_hup
Читайте, значит другая сторона вешает трубку отправляющей стороне. Это значит, что он больше ничего не отправит. Однако это могло держать чтение открытым, и вы все равно могли бы захотеть отправить в него некоторые данные.
shutdown
закрывает Чтение / Запись / Оба https://doc.rust-lang.org/std/net/enum.Shutdown.html, так что вам решать, что и когда вы хотите сделать.
TcpStream
внутренне держит FileDesc
и это будет close
fd
когда вы бросаете его, так что если вы этого не сделаете shutdown
вручную все равно будет закрыто, как только вы удалите данные TcpStream
от использования. https://github.com/rust-lang/rust/blob/master/src/libstd/sys/unix/fd.rs#L217