Sockets are the X windows of IO interfaces.
When there is no type hierarchy you don't have to manage the type hierarchy.
There's nothing in computing that can't be broken by another level of indirection.
Productivity is most important by engineering management rules, but enjoyment is most important for engineers. One stems from the other.
Eventually, I decided that thinking was not getting me very far and it was time to try building.
Procedure names should reflect what they do; function names should reflect what they return