Skip to content

A smallest-common-subset of socket functions for crossplatform networking, TCP & UDP

License

Notifications You must be signed in to change notification settings

ikskuh/zig-network

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c76240d · Feb 27, 2025
Oct 7, 2024
Dec 4, 2023
Sep 9, 2021
Oct 3, 2024
Jun 18, 2024
Aug 4, 2023
Jun 7, 2024
Jan 13, 2024
Feb 27, 2025
Feb 27, 2025
Apr 30, 2021

Repository files navigation

Zig Network Abstraction

Small network abstraction layer around TCP & UDP.

Features

  • Implements the minimal API surface for basic networking
  • Makes cross-platform abstractions
  • Supports blocking and non-blocking I/O via select/poll
  • UDP multicast support

Usage

Use with the package manager

build.zig.zon:

.{
    .name = "appname",
    .version = "0.0.0",
    .dependencies = .{
        .network = .{
            .url = "https://github.com/MasterQ32/zig-network/archive/<COMMIT_HASH_HERE>.tar.gz",
            .hash = "HASH_GOES_HERE",
        },
    },
}

(To aquire the hash, please remove the line containing .hash, the compiler will then tell you which line to put back)

build.zig:

exe.addModule("network", b.dependency("network", .{}).module("network"));

Usage example

const network = @import("network");

test "Connect to an echo server" {
    try network.init();
    defer network.deinit();

    const sock = try network.connectToHost(std.heap.page_allocator, "tcpbin.com", 4242, .tcp);
    defer sock.close();

    const msg = "Hi from socket!\n";
    try sock.writer().writeAll(msg);

    var buf: [128]u8 = undefined;
    std.debug.print("Echo: {}", .{buf[0..try sock.reader().readAll(buf[0..msg.len])]});
}

See async.zig for a more complete example on how to use asynchronous I/O to make a small TCP server.

Run examples

Build all examples:

$ zig build examples

Build a specific example:

$ zig build sync-examples

To test an example, eg. echo:

$ ./zig-out/bin/echo 3000

in another terminal

$ nc localhost 3000
hello
hello
how are you
how are you

Notes

On Windows receive and send function calls are asynchronous and cooperate with the standard library event loop when io_mode = .evented is set in the root file of your program.
Other calls (connect, listen, accept etc) are blocking.

About

A smallest-common-subset of socket functions for crossplatform networking, TCP & UDP

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published