Ich versuche, einen einfachen UDP-Server mit OCaml und der Async-API zu tun, aber ich bin fest. Ich kann dieses einfache Beispiel nicht funktionieren lassen.Einfache UDP-Server OCaml/Async
let wait_for_datagram() : unit Deferred.t =
let port = 9999 in
let addr = Socket.Address.Inet.create Unix.Inet_addr.localhost ~port in
let%bind socket = Udp.bind addr in
let socket = Socket.fd socket in
let stop = never() in
let config = Udp.Config.create ~stop() in
let callback buf _ : unit = failwith "got a datagram" in
Udp.recvfrom_loop ~config socket callback
Ich teste es mit:
echo -n "hello goodbye" > /dev/udp/localhost/9999
Nichts in meinem Programm passiert. Ich habe versucht, mit anderen Tools zu untersuchen. diese
Ich sehe ein destination unreachable
Paket mit Wireshark und lsof
zeigt mir:
> lsof -i :9999
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
main.exe 77564 nemo 5u IPv4 0x25251bcc3485235f 0t0 UDP localhost:distinct
Was mache ich falsch hier?
Danke, arbeiten beide Befehle. Tritt diese Verwechslung mit TCP auf? Ich hatte nie Probleme mit 'nc' mit' localhost'. – Nemo
@Nemo vielleicht Systeme werden nur mehr IPv6-kompatibel, wer weiß) Überprüfen Sie diese https://tools.ietf.org/html/rfc3484#section-10.3. Es scheint, dass IPv6-Adressen standardmäßig Vorrang vor IPv4-Adressen haben. Sie können den Vorrang in '/ etc/gai.conf' zumindest auf Linux-Systemen ändern. Überprüfen Sie auch, wie "getaddrinfo" funktioniert. – Stas