Какова цель SOCK_DGRAM и SOCK_STREAM в контекстных сокетах AF_UNIX? - PullRequest
0 голосов
/ 24 июня 2018

Насколько я понимаю, SOCK_DGRAM и SOCK_STREAM соответствуют сетевым коммуникациям без установления соединения и с установлением соединения, выполненным с использованием семейства адресов INET.

Теперь я пытаюсь научить сокеты AF_UNIX выполнять IPC между процессами, запущенными на одном хосте, и там я вижу, что нам нужно указать тип sub_socket_SOCK_DGRAM или SOCK_STREAM.Я не могу понять для сокетов AF_UNIX, какова цель указания типа под сокета.

Может кто-нибудь помочь понять значение SOCK_DGRAM и SOCK_STREAM в контексте сокетов AF_UNIX?

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Этот вопрос меня тоже некоторое время смущал, но, как сказал Бен, с типом сокета является SOCK_STREAM ИЛИ SOCK_DGRAM, все они означают один и тот же способ доступа к межпроцессному взаимодействию между клиентом и сервером. В домене AF_UNIX это не имеет ни малейшего отличия.

0 голосов
/ 24 июня 2018

Бывает, что TCP является как потоковым протоколом, так и ориентированным на соединение, тогда как UDP является протоколом дейтаграмм и без установления соединения.Однако возможно иметь протокол дейтаграмм, ориентированный на соединение.Вот что такое специальный файл блока (или почтовый ящик Windows).

(хотя вы не можете использовать потоковый протокол без установления соединения, это не имеет смысла, если не учитывается /dev/null)

Флаг SOCK_DGRAM не означает, что сокет не подключен, это означает, что сокет ориентирован на дейтаграммы.

Потоковый сокет (и специальный символьный файл, такой как / dev / random или / dev /)null) обеспечивает (или использует, или оба) непрерывную последовательность байтов, без присущей структуры.Структура обеспечивается путем интерпретации содержимого потока.Вообще говоря, на каждом конце потока есть только один процесс.

Сокет, ориентированный на дейтаграмму, предоставляет (или использует, или оба) короткие сообщения, которые ограничены по размеру и являются автономными.Вообще говоря, сервер может получать дейтаграммы от нескольких клиентов, используя recvfrom (который предоставляет вызывающей стороне адрес для отправки ответов) и отвечает на них с sendto, указывая этот адрес.

...