Пример для объяснения unix-доменного сокета - AF_INET vs AF_UNIX

пока я читал, что означает AF_INET, я узнал, что есть еще одно семейство под названием UNIX domain socket. Вот ссылка wiki Я читал об этом.

Я не понимаю, что это значит:

Сокеты домена Unix используют файловую систему в качестве пространства имен имен. На них ссылаются процессы как inodes в файловой системе. Эта позволяет двум процессам открывать один и тот же сокет для связи. Однако связь происходит полностью внутри операционной системы ядра.

Если я хочу сделать SSH or FTP, в какой семье я использую AF_INET or AF_UNIX. Я немного запутался здесь.

Ответ 1

Если вы хотите общаться с удаленным хостом, вам, вероятно, понадобится сокет INET.

Разница заключается в том, что сокет INET привязан к кортежу IP-адреса, а сокет UNIX "привязан" к специальному файлу вашей файловой системы. Как правило, только процессы, запущенные на одном компьютере, могут взаимодействовать через последние.

Итак, зачем использовать сокет UNIX? Точно по причине выше: связь между процессами на одном и том же хосте, являющаяся легкой альтернативой сокету INET через loopback.

Фактически, сокеты INET размещаются в верхней части полного стека TCP/IP, с алгоритмами перегрузки трафика, отсрочками и т.п. для обработки. Сокет UNIX не должен решать какие-либо из этих проблем, так как все предназначено для локального использования на машине, поэтому его код намного проще и связь быстрее. Конечно, вы, вероятно, заметите разницу только при большой нагрузке, например. при обратном проксировании сервера приложений (Node.js, Tornado...) за Nginx и т.д.

Ответ 2

Сокеты AF_UNUX обеспечивают отличную межпроцессную связь. Откройте пару сокетов socket socket (..) "и привяжите к временному имени файла. Запись в одну из пары поступает в другую. Ядро маршрутизирует сообщения без накладных расходов на протокол или файловую систему. Можно использовать блокировку ввода/вывода или выбрать (...), чтобы синхронизировать потоки и процессы в режиме FIFO. Мне нравится неблокировать режим select и datagram (может получить длину), но вы можете выбрать свой собственный. Обязательно удалите временный файл при выходе (он будет иметь нулевые байты но все равно будет отображаться в каталоге файловой системы) JLP