Master the fundamental concepts of tcp/ip from scratch through this focused micro-challenge.
UDP is connectionless with no handshake or reliability guarantees. For example, a DNS client on port 49152 talks to 8.8.8.8:53 with a single sendto() call. The syscall sequence starts with:
cLoading…
Arguments: AF_INET for IPv4, SOCK_DGRAM for datagrams, IPPROTO_UDP (or 0).
Without getaddrinfo(), you construct the address structure yourself:
cLoading…
Key fields:
sin_family: always AF_INETsin_port: use htons() for network byte ordersin_addr: 32-bit IPv4 addressThen bind() for servers, sendto()/recvfrom() for each datagram. Unlike TCP's connect()/send() pattern, UDP is stateless: every sendto() must carry the destination address, and every recvfrom() tells you who sent the packet. This makes UDP ideal for DNS queries to 8.8.8.8:53 where one request expects one reply.
This task requires you to build a UDP client and server using only raw syscalls. Forgetting htons() on the port field is an extremely common bug on little-endian machines: the value silently becomes garbage instead of erroring. Every DNS resolver and DHCP client on Linux ultimately calls socket(AF_INET, SOCK_DGRAM, 0) and fills sockaddr_in exactly as you do here, since getaddrinfo() is just a convenience wrapper around this sequence.
Implement a UDP client and server using only raw syscalls.
Requirements:
Three hints are available for this task, revealed one at a time inside the code workspace so you can struggle productively before seeing them.
Every task includes starter code, theory, and hidden tests so you can implement and verify locally in the browser.
How it works