Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Веб-программирование / Удалённые соединения / Exercises / Подключитесь к хосту
Решение: Подключитесь к хосту
Вот один из возможных вариантов решения задачи.
Код
my $host = 'example.com';
if try IO::Socket::INET.new(:host($host), :port(80)) -> $conn {
say "connected to $host";
$conn.close;
}
else {
say "could not connect to $host";
}🦋 Исходный код можно найти в файле connect-to-host.raku.
Вывод
connected to example.comКомментарии
IO::Socket::INET.new(:host, :port)открывает соединение немедленно и бросает исключение, если хост недостижим.Обёртка в
tryпревращает это исключение вNilвместо аварийного завершения. Конструкцияif … -> $connсвязывает сокет при успешном соединении и выполняет веткуelse, когда соединения нет, — надёжный способ попытаться подключиться.Чтобы увидеть ветку
elseв действии, поменяйте$hostна несуществующее имя, например'example.comp'. Тогда не сработает разрешение DNS — безtryвы получили бы ошибку вродеFailed to resolve host name 'example.comp', — но здесьtryпревращает её вNil, и программа спокойно печатаетcould not connect to example.comp.