# udp.ludic — Udp.* on the loopback: two sockets, one datagram each way. program UdpDemo { entry { let a = Udp.open(0) let b = Udp.open(0) let pa = Udp.port(a) let pb = Udp.port(b) let lo = Udp.ip("127.0.0.1") let out = buffer(16) out[0] = 104 out[1] = 105 let sent = Udp.send(a, lo, pb, out, 2) let inb = buffer(64) var got = 0 var tries = 0 while got == 0 and tries < 200000 { got = Udp.recv(b, inb, 64); tries += 1 } let from_ok = Udp.from_ip(b) == lo and Udp.from_port(b) == pa Udp.send(b, Udp.from_ip(b), Udp.from_port(b), inb, got) var back = 0 tries = 0 while back == 0 and tries < 200000 { back = Udp.recv(a, out, 16); tries += 1 } let bad = Udp.ip("1.2.3") == 0 and Udp.ip("300.1.1.1") == 0 print(`{sent} {got} {inb[0]} {inb[1]} {from_ok} {back} {Udp.ip_text(lo)} {bad} {Udp.recv(a, out, 16)} {pa > 0}`) Udp.close(a) Udp.close(b) } }