The TLI/XTI t_open() call takes a path to a character device to identify the desired protocol, instead of a bunch of numbers like BSD socket() does. Isn’t the former approach both more Unix-like and more elegant-and also more extensible? Supporting new protocols, multiple TCP/IP stacks - all easily achievable just by creating a different device driver and telling the app to open a different path (or even using something like a mount namespace to make the hardcoded path go to a different device for each app.) With Berkeley sockets it isn’t clear how to achieve that.