Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Общая информация Механизм взаимодействия сокетов

Механизм взаимодействия сокетов

Ядро 4.2BSD ввело более гибкий по сравнению с каналами механизм IPC, основанный на сокетах. Сокет является конечной коммуникационной точкой, на которую ссылается дескриптор, подобно файлу или каналу. Два процесса могут создать каждый по сокету, а затем соединить эти две конечные точки с образованием надежного потока байтов. После соединения дескрипторы сокетов могут использоваться процессами для чтения или записи аналогично их использованию в каналах. Прозрачность сокетов дает ядру возможность перенаправлять вывод одного процесса на ввод другого процесса, находящегося на другой машине. Главным различием между каналами и сокетами является то, что для каналов требуется, чтобы общий родительский процесс установил коммуникационный канал. Соединение между сокетами может быть установлено двумя несвязанными процессами, возможно находящимися на различных машинах.

Очереди fifo выглядят как объекты в файловой системе, которые несвязанные процессы могут открыть и послать через них данные тем же способом, как через пару сокетов. Таким образом, для очередей fifo не требуется установка общим родителем; соединение с ними может быть установлено после того, как пара процессов запущена. В отличие от сокетов очереди fifo могут использоваться лишь на локальной машине; они не могут использоваться для взаимодействия между процессами на различных машинах.

Механизм сокетов требует расширений традиционных системных вызовов ввода/ вывода UNIX, чтобы предоставить соответствующую семантику именования и соединения. Вместо перегрузки существующего интерфейса разработчики использовали существующие интерфейсы в той мере, в которой они могли быть использованы без изменений, и разработали новые интерфейсы для работы с добавленной семантикой. Системные вызовы read и write были использованы для соединений типа потока байтов, но для отправки и получения адресованных сообщений, таких, как дейтаграммы, были добавлены шесть новых системных вызовов. Системные вызовы для записи сообщений включали send, sendto и sendmsg. Системные вызовы для чтения сообщений включали recv, recvfrom и recvmsg. В ретроспективе два первых в каждом классе являлись особыми случаями других; recvfrom и sendto, возможно, должны были бы быть добавлены к recvmsg и sendmsg соответственно в качестве библиотечных интерфейсов.

Сейчас 27 гостей онлайн