简单的 UDP 服务器 OCaml/Async



我正在尝试使用 OCaml 和异步 API 做一个简单的 UDP 服务器,但我被卡住了。我无法使这个简单的例子起作用。

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 

我用以下方法进行测试:

echo -n "hello goodbye" > /dev/udp/localhost/9999

我的程序中没有任何反应。我试图用其他工具进行调查。

我看到一个带有Wireshark的destination unreachable数据包,lsof向我展示了以下内容:

> lsof -i :9999 
COMMAND    PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
main.exe 77564     nemo   5u   IPv4 0x25251bcc3485235f      0t0  UDP localhost:distinct

我在这里做错了什么?

代码对我来说看起来不错。我认为默认情况下localhost解析为 IPv6 地址,您只需将其发送到那里即可。

尝试强制使用 IPv4 协议

echo -n "hello goodbye" | nc -4 -u -w0 localhost 9999

或指定显式 IPv4 地址

echo -n "hello goodbye" > /dev/udp/127.0.0.1/9999

相关内容

  • 没有找到相关文章

最新更新