Создание пары соединенных сокетов
#include <sys/types.h>#include <sys/socket.h>int socketpair( int domain,int type,int protocol,int *fd[2] );
0
заставляет socketpair() использовать протокол по умолчанию, подходящий для запрошенного типа сокета.2
целых чисел, где будут храниться файловые дескрипторы для пары сокетов.libsocket
Вызов socketpair() создает безымянную пару подключенных сокетов в указанном domain указанного type, используя необязательно указанный аргумент protocol. Дескрипторы файлов возвращаются в массиве fd и идентичны.
Допустимые типы описаны в socket().
Если аргумент protocol не равен нулю, то это должен быть протокол, который поддерживается семейством адресов. В настоящее время такие протоколы не определены.
#include <stdio.h>#include <sys/socket.h>#define CHAR_BUFSIZE 20int main( int argc, char **argv ){int fd[2], len;char message[CHAR_BUFSIZE];if ( socketpair( AF_LOCAL, SOCK_STREAM, 0, fd ) == -1 ){return (1);}/* If you write to fd[0], you read from fd[1] and vice versa. *//* Print a message into one end of the socket */snprintf( message, CHAR_BUFSIZE, "First message" );write( fd[0], message, strlen( message ) + 1 );/* Print a message into the other end of the socket */snprintf( message, CHAR_BUFSIZE, "Second message" );write( fd[1], message, strlen( message ) + 1 );/* Read back the data written to the first socket */len = read( fd[0], message, CHAR_BUFSIZE - 1 );message[len] = '\0';printf( "Read [%s] from first fd \n", message );/* Read back the data written to the second socket */len = read( fd[1], message, CHAR_BUFSIZE - 1 );message[len] = '\0';printf( "Read [%s] from second fd \n", message );close( fd[0] );close( fd[1] );return (0);}
POSIX 1003.1
Предыдущий раздел: Описание API сетевой библиотеки