They’re “file like” in the sense that they’re exposed as an fd
, but they’re not exposed via the filesystem at all (Unlike e.g. unix sockets), and the existing API is just mapped over the sockets one (i.e. write()
instead of send()
, read()
instead of recv()
). There’s also a difference in how you create them, you open()
a file, but connect()
a socket, etc.
(As an aside, it turns out Bash has its own virtual file-based wrapper around sockets, so you can do things like cat
a remote port with Bash, something you can do natively in Plan 9)
Really it just shows that “everything is a file” didn’t stand up in practice, there’s more stuff that needs special treatment than doesn’t (e.g. Interacting with TTYs also has special APIs). It makes more sense to have a better dedicated API than a generic catch-all one.
I have never understood why you can delegate a subdomain but not the root domain, I doubt it was a technical issue because they added support for it recently via
SVCB
records (But maybe technical concerns were actually fixed in the decades since)