The
sockaddr_snprintf() function formats a socket address into a form suitable for printing.
This function is convenient because it is protocol independent, i.e. one does not need to know the address family of the sockaddr in order to print it. The
printf(3) like format string specifies how the address is going to be printed. Some formatting characters are only supported by some address families. If a certain formatting character is not supported, then the string “N/A” is printed.
The resulting formatted string is placed into
buf. Up to
buflen characters are placed in
buf.
The following formatting characters are supported (immediately after a percent (‘%') sign):
a
The node address portion of the socket address is printed numerically. For
AF_INET the address is printed as: “A.B.C.D” and for AF_INET6 the address is printed as: “A:B...[%if]” using
getnameinfo(3) internally with
NI_NUMERICHOST. For
AF_APPLETALK the address is printed as: “A.B” For
AF_LOCAL (
AF_UNIX) the address is printed as: “socket-path” For
AF_LINK the address is printed as: “a.b.c.d.e.f” using
link_ntoa(3), but the interface portion is skipped (see below). For
AF_UNSPEC nothing is printed.
A
The symbolic name of the address is printed. For AF_INET and AF_INET6 this is the hostname associated with the address. For all other address families, it is the same as the “a” format.
f
The numeric value of the family of the address is printed.
l
The length of the socket address is printed.
p
For AF_INET, AF_INET6, and AF_APPLETALK the numeric value of the port portion of the address is printed.
P
For AF_INET and AF_INET6 this is the name of the service associated with the port number, if available. For all other address families, it is the same as the “p” format.
I
For AF_LINK addresses, the interface name portion is printed.
F
For AF_INET6 addresses, the flowinfo portion of the address is printed numerically.
R
For AF_APPLETALK addresses, the netrange portion of the address is printed as: “phase:[firstnet,lastnet]”
S
For AF_INET6 addresses, the scope portion of the address is printed numerically.
?
If present between “%” and the format character, and the selected format does not apply to the given address family, the “N/A” string is elided and no output results.