Racket предоставляет функции для работы с протоколами уровня transport TCP и UDP на всех платформах, поддерживаемых Racket (например, * nix, macOS, Windows).
Но, насколько я знаю,это не относится к функциональности нижнего уровня network , такой как ICMP (для IPv4 или IPv6).
Racket предоставляет FFI, через который вы можете вызывать соответствующие специфичные для ОС функции, которые могутты делаешь это.Однако, в зависимости от того, что вы хотите выполнить, может быть проще использовать process
для выполнения такой команды, как ping
- затем read-line
порт ввода Racket, переданный со стандартного вывода подпроцесса,и проанализировать это, чтобы получить необходимую информацию.(Если у вас есть вопросы о деталях использования process
, это, вероятно, послужит хорошим отдельным вопросом для публикации здесь.)
Обновление: вместо process
вы, вероятно, могли бы просто использоватьsystem
:
#lang racket/base
(require racket/port
racket/system)
(with-output-to-string
(lambda () (system "ping -c 1 127.0.0.1")))
Возвращает строку вроде:
"PING 127.0.0.1 (127.0.0.1): 56 data bytes\n64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.068 ms\n\n--- 127.0.0.1 ping statistics ---\n1 packets transmitted, 1 packets received, 0.0% packet loss\nround-trip min/avg/max/stddev = 0.068/0.068/0.068/0.000 ms\n"