Io module

peer_address

procedure · 1 overloadSource

The far end of a connected stream. On the accepting side this is the client's address and its ephemeral port; on the connecting side it is the server's.

Example
Io :: #import "Extensions/Io";

main :: () {
    Io.io_run(() {
        listener, _ := Io.tcp_listen("127.0.0.1:0");
        defer Io.close(listener);

        address, _ := Io.local_address(listener);
        client, connect_error := Io.connect(address);
        assert(connect_error == .NONE);
        defer Io.close(client);

        server, accept_error := Io.accept(listener);
        assert(accept_error == .NONE);
        defer Io.close(server);

        far, _ := Io.peer_address(client);
        assert(far.port == address.port); // the client's peer is the listener
        near, _ := Io.local_address(client);
        seen, _ := Io.peer_address(server);
        assert(seen.port == near.port); // the server sees the client's own port
    });
}

Doesn't run in the browser (skipped on wasm).

peer_address :: (stream: Tcp_Stream) -> (Address, Io_Error)

The far end of a connected stream. On the accepting side this is the client's address and its ephemeral port; on the connecting side it is the server's.

Parameters

stream: Tcp_Stream

Returns

Example
Io :: #import "Extensions/Io";

main :: () {
    Io.io_run(() {
        listener, _ := Io.tcp_listen("127.0.0.1:0");
        defer Io.close(listener);

        address, _ := Io.local_address(listener);
        client, connect_error := Io.connect(address);
        assert(connect_error == .NONE);
        defer Io.close(client);

        server, accept_error := Io.accept(listener);
        assert(accept_error == .NONE);
        defer Io.close(server);

        far, _ := Io.peer_address(client);
        assert(far.port == address.port); // the client's peer is the listener
        near, _ := Io.local_address(client);
        seen, _ := Io.peer_address(server);
        assert(seen.port == near.port); // the server sees the client's own port
    });
}

Doesn't run in the browser (skipped on wasm).

See also