SocketAddrFormat
Description
Render a SocketAddr back into a “ip:port” string. IPv6 addresses are emitted with [...] brackets so the output round-trips through SocketAddrParse.
Parameters
| Name | Direction | Description |
|---|---|---|
addr |
in | Address to format. |
alloc |
in | Allocator backing the returned Str. Caller owns the result and must StrDeinit it. |
Success
returns initialized Str.
Failure
returns empty Str if the address cannot be formatted (e.g. unknown family); logs the failure.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Socket.c:469:
const struct sockaddr_in *sa = (const struct sockaddr_in *)addr->raw;
if (!format_ipv4((const u8 *)&sa->sin_addr.s_addr, host_data, 48)) {
LOG_ERROR("SocketAddrFormat: format_ipv4 failed");
break;
}- In
Socket.c:480:
const u8 *v6 = sa->sin6_addr.s6_addr;
if (!format_ipv6(v6, host_data, 48)) {
LOG_ERROR("SocketAddrFormat: format_ipv6 failed");
break;
}- In
Socket.c:487:
StrAppendFmt(&out, "[{}]:{}", (Zstr)host_data, (u32)port);
} else {
LOG_ERROR("SocketAddrFormat: unknown family {}", (u32)addr->family);
}
}- In
Resolve.c:45:
VecForeachPtr(&addrs, a) {
Str s = SocketAddrFormat(a, alloc);
// Strip the trailing ":0" since we resolve with port=0; keep
// bracket form on v6 to round-trip through SocketAddrParse.
- In
Beam.c:346:
static void handle_connection(Allocator *alloc, Socket *client, const SocketAddr *upstream_addr) {
Str peer_str = SocketAddrFormat(&client->peer, alloc);
Socket upstream;- In
SysDns.Api.c:95:
return false;
}
Str s = SocketAddrFormat(ad, a);
bool ok = (StrLen(&s) > 0) && ZstrCompare(StrBegin(&s), expect) == 0;
StrDeinit(&s);- In
SysDns.Api.c:105:
return false;
}
Str s = SocketAddrFormat(ad, a);
bool ok = (StrLen(&s) > 0) && ZstrCompare(StrBegin(&s), expect) == 0;
StrDeinit(&s); bool ok = SocketAddrParse(&addr, spec, SOCKET_KIND_TCP);
if (ok) {
Str r = SocketAddrFormat(&addr, a);
ok = StrLen(&r) > 0 && ZstrCompare(StrBegin(&r), expect) == 0;
StrDeinit(&r); ok = ok && local.length == 16u;
Str s = SocketAddrFormat(&local, a);
ok = ok && StrLen(&s) > 0 && ZstrCompareN(StrBegin(&s), "127.0.0.1:", 10u) == 0;
StrDeinit(&s); return false;
}
Str s = SocketAddrFormat(VecPtrAt(out, i), a);
StrMergeR(buf, &s);
StrDeinit(&s);- In
SysDns.c:93:
bool ok = got && VecLen(&out) == 1 && VecPtrAt(&out, 0)->family == SOCKET_FAMILY_INET;
if (ok) {
Str s = SocketAddrFormat(VecPtrAt(&out, 0), a);
ok = (StrLen(&s) > 0) && ZstrCompare(StrBegin(&s), "203.0.113.7:9999") == 0;
StrDeinit(&s);- In
SysDns.c:117:
bool ok = got && VecLen(&out) == 1 && VecPtrAt(&out, 0)->family == SOCKET_FAMILY_INET6;
if (ok) {
Str s = SocketAddrFormat(VecPtrAt(&out, 0), a);
// SocketAddrFormat emits the bracketed form for IPv6.
ok = (StrLen(&s) > 0) && ZstrCompare(StrBegin(&s), "[::1]:443") == 0;- In
SysDns.c:144:
if (ok) {
VecForeachPtr(&out, ad) {
Str s = SocketAddrFormat(ad, a);
u64 L = StrLen(&s);
if (L < 3 || StrBegin(&s)[L - 1] != '3' || StrBegin(&s)[L - 2] != '5' || StrBegin(&s)[L - 3] != ':') {- In
SysDns.c:173:
bool ok = got && one.family == SOCKET_FAMILY_INET;
if (ok) {
Str s = SocketAddrFormat(&one, a);
ok = (StrLen(&s) > 0) && ZstrCompare(StrBegin(&s), "127.0.0.1:80") == 0;
StrDeinit(&s);- In
Socket.c:46:
return false;
}
Str local_str = SocketAddrFormat(&local, a);
SocketAddr connect_addr;
bool parsed = SocketAddrParse(&connect_addr, (Zstr)StrBegin(&local_str), SOCKET_KIND_TCP);- In
Socket.c:102:
return false;
}
Str rendered = SocketAddrFormat(&addr, alloc_base);
ok = ok && StrLen(&rendered) > 0 && ZstrCompare(StrBegin(&rendered), "127.0.0.1:8080") == 0;
StrDeinit(&rendered);- In
Socket.c:113:
return false;
}
Str rendered = SocketAddrFormat(&addr, alloc_base);
ok = ok && StrLen(&rendered) > 0 && ZstrCompare(StrBegin(&rendered), "[::1]:8080") == 0;
StrDeinit(&rendered);- In
Socket.c:164:
}
Str local_str = SocketAddrFormat(&local, a);
SocketAddr connect_addr;
bool parsed = SocketAddrParse(&connect_addr, (Zstr)StrBegin(&local_str), SOCKET_KIND_TCP);- In
Socket.c:646:
bool ok = SocketAddrParse(&addr, spec, SOCKET_KIND_TCP);
if (ok) {
Str r = SocketAddrFormat(&addr, a);
ok = StrLen(&r) > 0 && ZstrCompare(StrBegin(&r), expect) == 0;
StrDeinit(&r);- In
Socket.c:785:
ok = ok && addr.length == 16u;
Str s = SocketAddrFormat(&addr, a);
ok = ok && StrLen(&s) > 0 && ZstrCompare(StrBegin(&s), "1.2.3.4:80") == 0;
StrDeinit(&s);- In
Socket.c:802:
bool ok = SocketAddrParse(&addr, "10.0.0.1:4660", SOCKET_KIND_TCP);
Str s = SocketAddrFormat(&addr, a);
ok = ok && StrLen(&s) > 0 && ZstrCompare(StrBegin(&s), "10.0.0.1:4660") == 0;
StrDeinit(&s);- In
Socket.c:831:
#endif
Str s = SocketAddrFormat(&addr, a);
ok = ok && StrLen(&s) > 0 && ZstrCompare(StrBegin(&s), "[2001:db8::1]:443") == 0;
StrDeinit(&s);- In
Socket.c:848:
ok = ok && addr.family == SOCKET_FAMILY_INET6;
Str s = SocketAddrFormat(&addr, a);
ok = ok && StrLen(&s) > 0 && ZstrCompare(StrBegin(&s), "[::1]:8080") == 0;
StrDeinit(&s);- In
Socket.c:934:
ok = ok && local.length == 16u;
Str s = SocketAddrFormat(&local, a);
ok = ok && StrLen(&s) > 0 && ZstrCompare(StrBegin(&s), "127.0.0.1:4660") == 0;
StrDeinit(&s);- In
Socket.c:968:
// Rendered "127.0.0.1:<port>" with a nonzero ephemeral port.
Str s = SocketAddrFormat(&local, a);
ok = ok && StrLen(&s) > 0;
if (ok) {- In
Socket.c:1008:
return false;
}
Str local_str = SocketAddrFormat(&local, a);
SocketAddr connect_addr;
bool parsed = SocketAddrParse(&connect_addr, (Zstr)StrBegin(&local_str), SOCKET_KIND_TCP);- In
Socket.c:1116:
*local_out = local;
Str local_str = SocketAddrFormat(&local, a);
SocketAddr connect_addr;
bool parsed = SocketAddrParse(&connect_addr, (Zstr)StrBegin(&local_str), SOCKET_KIND_TCP);- In
Socket.c:1170:
// the *len_io capture). Format and check the loopback host prefix.
{
Str peer = SocketAddrFormat(&server.peer, a);
Zstr p = StrBegin(&peer);
ok = ok && StrLen(&peer) > 0 && p[0] == '1' && p[1] == '2' && p[2] == '7' && p[3] == '.';- In
Socket.c:1263:
// local must be a usable IPv4 address with a kernel-picked port that
// formats to "127.0.0.1:<port>" with port in 1..65535.
Str rendered = SocketAddrFormat(&local, a);
bool ok = StrLen(&rendered) > 0;
// must start with the loopback host and a colon, then a non-"0" port.
- In
Socket.c:1483:
ok = ok && p;
if (p) {
Str r = SocketAddrFormat(&addr, a);
ok = ok && ZstrCompare(StrBegin(&r), "127.0.0.1:65535") == 0;
StrDeinit(&r);- In
Socket.c:1495:
ok = ok && p;
if (p) {
Str r = SocketAddrFormat(&addr, a);
ok = ok && ZstrCompare(StrBegin(&r), "127.0.0.1:0") == 0;
StrDeinit(&r);- In
Socket.c:1507:
ok = ok && p;
if (p) {
Str r = SocketAddrFormat(&addr, a);
ok = ok && ZstrCompare(StrBegin(&r), "1.2.3.4:4660") == 0;
StrDeinit(&r);- In
Socket.c:1547:
ok = ok && p;
if (p) {
Str r = SocketAddrFormat(&addr, a);
ok = ok && ZstrCompare(StrBegin(&r), "1.2.3.4:4660") == 0;
StrDeinit(&r);- In
Socket.c:1577:
{
SocketAddr empty = {0};
Str r = SocketAddrFormat(&empty, a);
ok = ok && StrLen(&r) == 0;
StrDeinit(&r);- In
Socket.c:1588:
ok = ok && p;
if (p) {
Str r = SocketAddrFormat(&addr, a);
ok = ok && ZstrCompare(StrBegin(&r), "[::1]:4660") == 0;
StrDeinit(&r);- In
SysDns.Mut.c:246:
return false;
}
Str s = SocketAddrFormat(ad, a);
bool ok = (StrLen(&s) > 0) && ZstrCompare(StrBegin(&s), expect) == 0;
StrDeinit(&s);
Last updated on