next up previous contents
Next: getsockname(), getpeername() Up: Funkcje pomocnicze Previous: sendfile()   Contents

socketpair()

Funkcja automatycznie tworzy dwa deskryptory połączonych gniazd. W praktyce stosuje się ją przede wszystkim do szybkiego utworzenia pary gniazd w domenie PF_UNIX gotowych od razu do wymiany danych.
  #include <sys/types.h>
  #include <sys/socket.h>
  
  int socketpair(int d, int type, int protocol, int sv[2]);
  
Pierwsze trzy argumenty mają znaczenie znalogiczne, jak w wywołaniu socket(). Ostatni argument to dwie zmienne typu int, którym zostaną przypisane nowoutworzone deskryptory. Funkcja zwraca 0 albo -1 (błąd).

Funkcje socketpair() można wykorzystać na przykład w taki sposób:

    int sd[2];
  
    socketpair (PF_UNIX, SOCK_STREAM, 0, sd);
  
    if (fork)
      {
        close (sd[0]);         /* potomek zamyka jedno z gniazd ... */
        ...
      }
  
    close (sd[1]);             /* a rodzic zamyka drugie gniazdo    */
    ...
  
Po takich operacjach proces macierzysty i potomek będą mogły komunikować się ze sobą za pośrednictwem połączonych gniazd. Warto przy okazji dodać, że gniazda SOCK_DGRAM w domenie PF_UNIX mają niewiele wspólnego z analogicznymi gniazdami w domenie PF_INET, a to oznacza, że są równie niezawodne jak gniazda SOCK_STREAM ...



Paweł Niewiadomski
2000-10-17