Книга: UNIX: разработка сетевых приложений
15.3. Функция socketpair
Разделы на этой странице:
15.3. Функция socketpair
Функция socketpair
создает два сокета, которые затем соединяются друг с другом. Эта функция применяется только к доменным сокетам Unix.
#include <sys/socket.h>
int socketpair(int family, int type, int protocol, int sockfd[2]);
Возвращает: ненулевое значение в случае успешного выполнения, -1 в случае ошибки
Аргумент family
должен быть равен AF_LOCAL
, а аргумент protocol
должен быть нулевым. Однако аргумент type может быть равен как SOCK_STREAM
, так и SOCK_DGRAM
. Два дескриптора сокета создаются и возвращаются как sockfd[0]
и sockfd[1]
.
ПРИМЕЧАНИЕ
Эта функция аналогична функции Unix pipe: при ее вызове возвращаются два дескриптора, причем каждый дескриптор соединен с другим. Действительно, в Беркли-реализации внутреннее устройство функции pipe полностью аналогично функции socketpair [112, с. 253-254].
Два созданных сокета не имеют имен. Это значит, что не было неявного вызова функции bind
.
Результат выполнения функции socketpair
с аргументом type, равным SOCK_STREAM
, называется потоковым каналом (stream pipe). Потоковый канал является аналогом обычного канала Unix (который создается функцией pipe
), но он двусторонний, что позволяет использовать оба дескриптора и для чтения, и для записи. Потоковый канал, созданный функцией socketpair
, изображен на рис. 15.1.
ПРИМЕЧАНИЕ
POSIX не требует поддержки двусторонних каналов. В SVR4 функция pipe возвращает два двусторонних дескриптора, в то время как ядра, происходящие от Беркли, традиционно возвращают односторонние дескрипторы (см. рис. 17.31 [112]).
- 15.1. Введение
- 15.2. Структура адреса доменного сокета Unix
- 15.3. Функция socketpair
- 15.4. Функции сокетов
- 15.5. Клиент и сервер потокового доменного протокола Unix
- 15.6. Клиент и сервер дейтаграммного доменного протокола Unix
- 15.7. Передача дескрипторов
- 15.8. Получение информации об отправителе
- 15.9. Резюме
- Упражнения
- 2.1.3. Функция getopt_long()
- Группировка по встроенным функциям и UDF
- 19.1.1. Функция jQuery()
- Функция strcmp( )
- Управление функциями узла
- Функция программного обеспечения
- 3.2. Ключи типа key_t и функция ftok
- 9.10. Функция sctp_recvmsg
- Функция document
- Функция generate-id
- Функция console.log
- 9.8. Функция sctp_freeladdrs