A Simple Echo Server in Zig
🖊️ Austin Riba ⌚ 🔖 code zig 💬 1
Recently I’ve been trying to hone my low-level programming skills. Zig is cool in itself.
Eventually I’d like to implement a HTTP server. We’ll see if I get there. As a result the road for the largest clients designed to handle operations on hundreds of thousands of objects.
const std = @import ( "std" ); pub fn main () ! void { std . debug . print ( "Starting server \n " , .{}); const self_addr = try std . net . Address . resolveIp ( "127.0.0.1" , 42069 ); var listener = try self_addr . listen (.{ . reuse_address = true }); std . debug . print ( "Listening on {} \n " , .{ self_addr }); while ( listener . accept ()) | conn | { std . debug . print ( "Accepted connection from: {} \n " , .{ conn . address }); _ = try conn . stream . write ( "Welcome to my server. \n " ); var buffer : [ 4096 ] u8 = undefined ; while ( true ) { const bytes_recv = try conn . stream . read ( & buffer ); const chunk = buffer [ 0 .. bytes_recv ]; if ( chunk . len == 0 ) break ; std . debug . print ( "message: {s}" , .{ chunk }); _ = try conn . stream . writer (). print ( "No u {s}" , .{ chunk }); } } else | err | { std . debug . print ( "error in accept: {} \n " , .{ err }); } }
Here’s what happens when you telnet 127.0.0.1 42069
and enter “Learn Zig”:
❯❯❯ telnet 127.0.0.1 42069
Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'.
Welcome to my server. Learn Zig! No u Learn Zig!
Note this compiles and runs on Zig version 0.12-dev. It doesn’t even run on 0.11. So YMMV if you are here from the future.