lean4-htt/tests/lean/run/async_udp_sockets.lean
Sofia Rodrigues 4881c3042e
refactor: replace Task with Async and minor changes to some basic Async functions (#10366)
This PR refactors the Async module to use the `Async` type in all of the
`Async` files.
2025-09-20 16:23:06 +00:00

42 lines
1.1 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Std.Internal.Async
import Std.Internal.UV
import Std.Net.Addr
open Std.Internal.IO.Async.UDP
open Std.Internal.IO.Async
open Std.Net
def assertBEq [BEq α] [ToString α] (actual expected : α) : IO Unit := do
unless actual == expected do
throw <| IO.userError <|
s!"expected '{expected}', got '{actual}'"
/-- Joe is another client. -/
def runJoe (addr : UInt16 → SocketAddress) (first second : UInt16) : Async Unit := do
let client ← UDP.Socket.mk
client.bind (addr second)
client.connect (addr first)
client.send (String.toUTF8 "hello robert!")
def acceptClose (addr : UInt16 → SocketAddress) (first second : UInt16) : IO Unit := do
let server ← UDP.Socket.mk
server.bind (addr first)
let res ← (runJoe addr first second).toIO
res.block
let res ← server.recv 1024 |>.toBaseIO
let (msg, addr) ← res.block
if let some addr := addr then
assertBEq addr.port second
assertBEq (String.fromUTF8! msg) "hello robert!"
#eval acceptClose (SocketAddress.v4 ∘ SocketAddressV4.mk (.ofParts 127 0 0 1)) 9001 9002
#eval acceptClose (SocketAddress.v6 ∘ SocketAddressV6.mk (.ofParts 0 0 0 0 0 0 0 1)) 9003 9004