2.2 KiB
hss Documentation
Detailed function breakdowns, Mach/Hurd concepts, and code explanations for the
hss (Hurd Socket Stat) utility.
Architecture Overview
hss is built as a two-tier design that exploits the boundary between
POSIX portability and Hurd-specific APIs:
-
Network probing layer — uses only POSIX APIs (
socket,connect,select,getifaddrs). This layer is portable to any POSIX system and is the reasonhsscompiles and runs on GNU/Hurd without Linux-specific dependencies. -
Process inspection layer — uses Mach/Hurd APIs (
proc_getallpids,proc_getprocargs,vm_deallocate,getproc). This layer is Hurd-specific because the Hurd process server is a userspace translator, not a kernel, so process enumeration happens via IPC, not syscalls.
The pipeline: gather candidate ports → deduplicate and sort → probe each with non-blocking connect → for hits, crawl the proc server to attribute ownership.
Quick Reference
| File | Topic |
|---|---|
mach-hurd.md |
Mach IPC, port rights, the proc server, out-of-line memory, vm_deallocate |
hss_try_connect.md |
Non-blocking connect() + select() pattern, EINPROGRESS handling |
hss_probe_port.md |
Port probing with localhost multi-address display |
hss_find_pids.md |
PID attribution via Mach proc server, heuristic matching |
hss_match_process.md |
Service recognition heuristics and port-token boundary matching |
hss_add_entry.md |
Sorted port-list insertion with deduplication |
hss_parse_services.md |
/etc/services and ~/.config/.hssrc parsing |
hss_get_eth_ips.md |
Ethernet interface IP enumeration |
Source Layout
hss.c — main(), argument parsing, output formatting
hss.h — includes the three implementation headers
hss-probe.h — network probing (try_connect, probe_port, get_eth_ips)
hss-proc.h — Mach process inspection (find_pids, match_process)
hss-ports.h — port list management (add_entry, parse_services, parse_config)