#Seeking UDP server help

1 messages · Page 1 of 1 (latest)

karmic mulch
#

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?
#

Seeking UDP server help

devout socket
#

Think you need the V6 version of AF.INET

#

os.AF.INET6

karmic mulch
#

aaah, of course facepalm Thanks, let me try!