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