Hi All,
Looks like the UDP is no longer supported protocol in the standard library, so I need to use C bindings instead. I'm trying to create a simple UDP server but it SIGABORTs due to invalid parameters to os.bind (unreachable).
for similar server port I'm getting:
/opt/zig-macos-aarch64-0.11.0-dev.4191+1bf16b172/lib/std/os.zig:3493:23: 0x1005b3537 in bind (main)
.INVAL => unreachable, // invalid parameters
^
/Users/snobb/progs/repos/protohacker-zig.git/task04/src/main.zig:15:16: 0x1005b2c53 in main (main)
try os.bind(sock, &addr.any, addr.getOsSockLen());
^
/opt/zig-macos-aarch64-0.11.0-dev.4191+1bf16b172/lib/std/start.zig:608:37: 0x1005b4133 in main (main)
const result = root.main() catch |err| {
^
???:?:?: 0x10090908b in ??? (???)
???:?:?: 0x36affffffffffff in ??? (???)
make: *** [run] Abort trap: 6```
The `.INVAL` means invalid parameter from bind. My bind is exactly the same as yours above except that I'm using IPv6 address.
```pub fn main() !void {
var sock = try os.socket(os.AF.INET, os.SOCK.DGRAM, 0);
const port = 8080;
const addr = try std.net.Address.parseIp6("::", port);
try os.bind(sock, &addr.any, addr.getOsSockLen());
defer os.close(sock);
log.info("listening on port {d}", .{port});
var ara = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer _ = ara.deinit();
var buf: [bufsz]u8 = undefined;
var caddr: os.sockaddr = undefined;
var caddr_len: os.socklen_t = undefined;
while (true) {
const size = try os.recvfrom(sock, &buf, bufsz, &caddr, &caddr_len);
std.debug.print("{} {s}\n", .{ caddr, buf[0..size] });
}
}```
Wondering if you have any pointers or examples how to create a new UDP server?
Thanks, let me try!