Files
exo/scripts/test_babbler/server.py
2026-04-20 13:10:04 +01:00

36 lines
991 B
Python

#!/usr/bin/env python3
import argparse
import socket
import sys
def main() -> int:
p = argparse.ArgumentParser(
description="IPv6 UDP server bound to a specific local address"
)
p.add_argument(
"--bind", required=True, help="Local IPv6 address to bind to, e.g. fde0:..."
)
p.add_argument("--port", type=int, default=45679, help="UDP port to listen on")
p.add_argument("--reply", default="ok", help="Reply prefix")
args = p.parse_args()
s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 1)
s.bind((args.bind, args.port, 0, 0))
print(f"listening on [{args.bind}]:{args.port}")
print(f"sockname={s.getsockname()}")
data, peer = s.recvfrom(65535)
print(f"from={peer} data={data!r}")
out = args.reply.encode() + b":" + data
s.sendto(out, peer)
print(f"sent={out!r} to={peer}")
return 0
if __name__ == "__main__":
raise SystemExit(main())