Разница между Unix доменом SOCK_DGRAM и SOCK_SEQPACKET? - PullRequest
2 голосов
/ 02 мая 2020

Согласно справочным страницам Linux для сокетов Unix, "Допустимые типы сокетов в UNIX домене ... SOCK_DGRAM для сокета, ориентированного на дейтаграммы, который сохраняет границы сообщений (как в большинстве UNIX реализации, UNIX доменные сокеты датаграмм всегда надежны и не переупорядочивают дейтаграммы) и (начиная с Linux 2.6.4) SOCK_SEQPACKET для сокета с последовательными пакетами, который ориентирован на соединение, сохраняет границы сообщений и доставляет сообщения в том порядке, в котором они были отправлены ". (http://man7.org/linux/man-pages/man7/unix.7.html).

Я думал, что «всегда надежно и не переупорядочивать дейтаграммы» - это то же самое, что «доставляет сообщения в том порядке, в котором они были отправлены».

В чем практическая разница между SOCK_DGRAM и SOCK_SEQPACKET?

Ответы [ 2 ]

1 голос
/ 02 мая 2020

В контексте UNIX доменных сокетов основное различие между ними является «ориентированным на дейтаграмму» и «ориентированным на соединение».

В случае SOCK_DGRAM вы не создаете соединение (например, с сервером), вы просто отправляете пакеты в сокет сервера. И если серверу нужно ответить, вам нужно создать свой собственный сокет, уведомить сервер об этом сокете, и тогда сервер сможет отправить ему ответ. Очень неудобно, если вам действительно нужно соединение, но может быть полезно, когда вам просто нужна односторонняя связь, то есть для отправки уведомлений.

SOCK_SEQPACKET - это путь к go, когда вам нужно ориентироваться на соединение подходит.

1 голос
/ 02 мая 2020

Разницу лучше понять с помощью UDP и TCP. Протокол, такой как UDP (без соединения), использует SOCK_DGRAM, реализация

Протокол, подобный TCP (ориентированный на соединение), использует SOCK_STREAM. Тем не менее, даже SOCK_SEQPACKET может быть использован. Разница между ними очень минимальна, TCP также может быть реализован с использованием последнего. На самом деле, SOCK_SEQPACKET является гибридом обоих. STCP - это сценарий использования SOCK_SEQPACKET. Объяснение в этой статье: http://urchin.earth.li/~twic/Sequenced_Packets_Over_Ordinary_TCP.html

Вот пост , в котором это подробно обсуждалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...