2016-10-09 3 views
1

Я создаю многопоточный асинхронный HTTP-сервер поверх mio.Как обрабатывать ошибки в mio?

Как мне обрабатывать события на клиенте TcpStream соединений?

  • Для is_readable это довольно просто: я прочитал запрос и напишу ответ.
  • Для других видов я не уверен. Должен ли я shutdown() поток, если я получу is_error или is_hup? Как насчет is_none()?
+2

Вы видели [эту серию от Германа Дж. Радтке] (http://hermanradtke.com/2015/07/12/my-basic-understanding-of-mio-and-async-io.html)? Он содержит полезную информацию об обработке ошибок в 'mio'. – ljedrz

+0

Спасибо, что читать было интересно. К сожалению, он много говорит об обработке ошибок :) – ElefEnt

ответ

1

Все, что вы упомянули, имеет очень точное значение и отображается непосредственно в POSIX/BSD Socket API. Тебе решать.

is_hup on Read означает, что другая сторона повесила боковую сторону. Это означает, что он больше не отправит вам ничего. Однако это могло бы держать чтение открытым, и вы все равно можете отправить ему некоторые данные.

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

Смежные вопросы