-- Showcase the calog net library over loopback with UDP datagrams: a spawned -- "lua" listener task binds a fixed high port and blocks in udpRecvFrom, while -- the main context opens an ephemeral socket and sends one datagram to it. The -- listener's blocking recv runs on its own task thread, so the main thread stays -- free to send. A short delay lets the datagram arrive and print before we exit. -- Run: bin/calog examples/scripts/libraries/net.lua local PORT = 47651 -- The listener runs in its own context/thread, so its blocking udpRecvFrom does -- not stall the main script. It prints the payload and sender it received. local listenerCode = string.format([[ local sock = udpOpen(%d) calogPrint("listener bound on port", %d) local packet = udpRecvFrom(sock, 1024) calogPrint("listener received:", packet.data, "from", packet.host .. ":" .. packet.port) udpClose(sock) ]], PORT, PORT) local listener = taskSpawn("lua", listenerCode) calogPrint("spawned listener handle:", listener) -- Give the listener a beat to bind its socket before we transmit. timeSleep(200) local sender = udpOpen(0) local sent = udpSendTo(sender, "127.0.0.1", PORT, "hello over udp") calogPrint("sender transmitted", sent, "bytes to 127.0.0.1:" .. PORT) udpClose(sender) -- Let the datagram land and the listener print, then tear everything down. timerAfter(300, function() taskClose(listener) calogExit(0) end)