J'essaye de faire un simple serveur UDP en utilisant OCaml et l'API Async mais je suis bloqué. Je ne peux pas faire fonctionner cet exemple simple.Simple serveur UDP 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
-je tester avec:
echo -n "hello goodbye" > /dev/udp/localhost/9999
Rien ne se passe dans mon programme. J'ai essayé d'enquêter avec d'autres outils.
Je vois un paquet destination unreachable
avec Wireshark et lsof
me montre ceci:
> lsof -i :9999
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
main.exe 77564 nemo 5u IPv4 0x25251bcc3485235f 0t0 UDP localhost:distinct
ce que je fais mal ici?
Merci, les deux commandes fonctionnent. Est-ce que cette confusion se pose avec TCP? Je n'ai jamais eu de problème en utilisant 'nc' avec' localhost'. – Nemo
@Nemo peut-être que les systèmes deviennent plus conformes IPv6, qui sait) Cochez cette https://tools.ietf.org/html/rfc3484#section-10.3. Il semble que les adresses IPv6 ont une priorité plus élevée que les adresses IPv4 par défaut. Vous pouvez changer la précédence dans '/ etc/gai.conf' au moins sur le système Linux. Aussi, vérifiez comment 'getaddrinfo' fonctionne. – Stas