Unix-сокеты являются двунаправленными сокетами - точно так же, как сокеты на основе IP, с которыми вы, вероятно, знакомы, и отчасти похожи на каналы, с которыми вы, вероятно, знакомы.
У них есть небольшой набор интересных свойств:
- Они находятся только в области «локального хоста» - вы не можете получить к ним доступ по сети, только на локальном компьютере.
- Вы можете создать их в режиме «поток», где они просто передают данные, как канал, как поток байтов.
- Вы можете создавать их в режиме «датаграммы», где они сохраняют границы между операциями отправки. Это позволяет вам сохранять кадрирование, не создавая собственный протокол кадрирования поверх потока байтов.
- В качестве «адреса» они используют файловую систему или в Linux «абстрактное пространство имен».
- Вы можете выдать себя за другой конец, надежно идентифицировать подключаемое программное обеспечение или передать файловые дескрипторы через сокет, в зависимости от вашей ОС.
По сути, они эквивалентны любому другому сокету - они имеют немного более интересные свойства, чем трубы, но в остальном радикально не отличаются. Они обычно имеют более высокую задержку IPC, чем конвейер, и часто более крупные буферы - хотя вы можете настроить это, и это зависит от платформы.
Последнее интересное свойство, которое следует помнить, заключается в том, что они используют файловую систему в качестве своего пространства имен - поэтому они похожи на именованный канал, а не на анонимный канал, в том программном обеспечении, которое ранее не могло взаимодействовать. (Абстрактные сокеты пространства имен совпадают, но путь к «файлу» не должен существовать.)
Нет ничего более глубокого, чем это - у них нет сверхсекретного скрытого свойства, которое радикально отличает их от обычного канала или TCP-соединения с localhost.