next up previous contents
Next: fcntl() Up: Socket tuning Previous: Socket tuning   Contents

setsockopt()/getsockopt()

Funkcje te to setsockopt() i getsockopt(). Zaczniemy wlaśnie od nich:
  #include <sys/types.h>
  #include <sys/socket.h>
  
  int  getsockopt(int  s, int level, int optname, void *optval,
                  socklen_t *optlen);
  
  int setsockopt(int s, int level, int optname,  const  void *optval, 
                 socklen_t optlen);
  
Funkcje zwracają 0 albo -1 (błąd).

Przejdźmy teraz do omówienia poszczególnych opcji, które mamy do dyspozycji. Zaczniemy od poziomu SOL_SOCKET (wszystkie opcje znajdują się w asm/socket.h):

Kolej na wybrane opcje SOL_IP - gniazda w domenie PF_INET (bits/in.h):

SOL_TCP (domena PF_INET, typ SOCK_STREAM) dysponuje tylko trzema opcjami (linux/socket.h):

W ten sposób dotarliśmy na samo dno ;), czyli do opcji specyficznych dla gniazd z domeny PF_PACKET (linux/if_packet.h);

Kilka słów na temat SOL_RAW. Dla gniazd z domeny PF_INET zestaw dostępnych opcji jest taki sam, jak na poziomie SOL_IP. Istnieje natomiast jedna ciekawa opcja dla gniazd [PF_INET, SOCK_RAW, IPPROTO_ICMP] (jądra 2.2.x):

ICMP_FILTER - Parametrem jest maska bitowa (unsigned long int) określająca typy komunikatów ICMP, które NIE mają być dostarczane do gniazda. Na przykład ustawienie tego parametru na 257 odfiltruje wszystkie komunikaty typu ICMP_ECHO i ICMP_ECHO_REPLY (bity numer 0 i 8 maski ustawione na 1).

Przydałyby się jeszcze konkretne przykłady użycia setsockopt()/getsockopt().

  /* Te kilka linijek kodu umożliwi wysyłanie/odbieranie pakietów broadcast */
  int b = 1;
  s = socket(PF_INET, SOCK_DGRAM, 0);
  setsockopt(s, SOL_SOCKET, SO_BROADCAST, &b, sizeof(int));
  
  /* Teraz sprawdzimy, czy włączone jest wysyłanie pakietów keep-alive */
  int keepalive, len = sizeof(int);
  s = socket(PF_INET, SOCK_STREAM, 0);
  getsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &keepalive, &len);
  if (keepalive) printf ("Keep-alive włączone.\n");
  


next up previous contents
Next: fcntl() Up: Socket tuning Previous: Socket tuning   Contents
Paweł Niewiadomski
2000-10-17