Perl6 IO :: Socket :: Async сервер умирает с исключением: сброс соединения по одноранговому узлу - PullRequest
0 голосов
/ 25 апреля 2018

Код сервера эхасоединение, которое сервер прерывает с этой ошибкой:

listen port 3333
0: 1524671069
An operation first awaited:
  in block <unit> at ./server2.p6 line 5

Died with the exception:
    connection reset by peer
      in block <unit> at ./server2.p6 line 5

X::AdHoc+{X::Await::Died}: connection reset by peer

Как изящно перехватить сетевые ошибки, чтобы сервер стал более устойчивым?

1 Ответ

0 голосов
/ 25 апреля 2018

Если вы хотите обработать случай, когда Supply (или любой ожидаемый, например, Promise), лежащий в основе whenever, завершает работу (или когда Promise не работает), вы можете установить QUIT Обработчик внутри всякий раз, когда. Он работает так же, как и обработчик исключений, поэтому он захочет, чтобы вы либо как-то совпали с исключением, либо просто default, если хотите обработать все причины выхода как "хорошие".

whenever $conn.Supply.lines -> $line {
    say "$id: $line" ;
    $conn.print( "$id : $line\n") ;
    QUIT {
        default {
            say "oh no, $_";
        }
    }
}

Будет выведено «о нет, сброс соединения по пиру» и будет продолжаться.

...