#include <sys/socket.h> int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
Mit setsockopt() wird der neue Wert einer Socket-Option festgelegt. Der genaue Datentyp für optval hängt von der Socket-Option ab und ist in den meisten Fällen int.
sockfd | Socket für den die Option festgelegt werden soll. |
---|---|
level | Level der Socket-Option, z.B. SOL_SOCKET. |
optname | Option die festgelegt weden soll, z.B. SO_REUSEADDR. |
optval | Zeiger auf eine Variable die den neuen Wert der Socket-Option enthält. |
optlen | Größe der für optval übergebenen Variable. |
Die folgende Tabelle gibt einen kurzen Überblick zu den Socket-Optionen, die auf allen POSIX-konformen Systemen vorhanden sein sollten. Auf eine ausführliche Beschreibung habe ich verzichtet, weil diese Informationen leicht zu ermitteln sind, wenn man den Namen der Option erst mal kennt.
Level | Option | Parameter | Beschreibung |
---|---|---|---|
SOL_SOCKET | SO_ACCEPTCONN | int | Wert ungleich 0 gibt an, dass Socket im Listen-Modus ist. Kann nur gelesen werden. |
SOL_SOCKET | SO_BROADCAST | int | Wert ungleich 0 erbittet die Erlaubnis Broadcast-Datagramme zu senden. Nur für Sockets vom Typ SOCK_DGRAM. |
SOL_SOCKET | SO_DEBUG | int | Wert ungleich 0 erbittet Debugging in tieferliegenden Protokollen zu aktivieren. (Was immer das heißen mag!) |
SOL_SOCKET | SO_DONTROUTE | int | Wert ungleich 0 erbittet das normale Routing zu übergehen. |
SOL_SOCKET | SO_ERROR | int | Liest anstehende Fehlercodes aus und setzt diese zurück. Kann nur gelesen werden. |
SOL_SOCKET | SO_KEEPALIVE | int | Wert ungleich 0 erbittet regelmäßige Übertragung von Keep-Alive-Datagrammen (protokollabhängig). |
SOL_SOCKET | SO_LINGER | struct linger | Legt den Umgang mit anstehenden Daten beim Aufruf von close() fest. |
SOL_SOCKET | SO_OOBINLINE | int | Wert ungleich 0 erbittet dass out-of-band-Daten im normalen Datenstrom einsortiert werden sollen. |
SOL_SOCKET | SO_RCVBUF | int | Größe des Empfangspuffers (in Bytes). |
SOL_SOCKET | SO_RCVLOWAT | int | Mindestmenge an Daten ab denen ein Socket lesbar ist (in Bytes). |
SOL_SOCKET | SO_RCVTIMEO | struct timeval | Timeout für Empfangs-Operationen. |
SOL_SOCKET | SO_REUSEADDR | int | Wert ungleich 0 erbittet Wiederverwendung lokaler Adressen beim Aufruf von bind(). |
SOL_SOCKET | SO_SNDBUF | int | Größe des Sendepuffers (in Bytes). |
SOL_SOCKET | SO_SNDLOWAT | int | Mindestmenge an Daten ab denen eine Sende-Operation ausgeführt wird. |
SOL_SOCKET | SO_SNDTIMEO | struct timeval | Timeout für Sende-Operationen. |
SOL_SOCKET | SO_TYPE | int | Ermittelt den Socket-Typ. Kann nur gelesen werden. |
Im Folgenden werden weitere Socket-Optionen aufgeführt, die unter Linux verfügbar sind und mir nennenswert erschienen. Eine vollständige Liste findet man in den Manpages, z.B. socket(7), ip(7), tcp(7), usw.
Level | Option | Parameter | Beschreibung |
---|---|---|---|
SOL_SOCKET | SO_BINDTODEVICE | char* | Ermöglicht das Binden eines Sockets an ein Interface (z.B. "eth0") anstatt an eine IP-Adresse eines Interfaces. |
IPPROTO_IP | IP_HDRINCL | int | Erlaubt bei Raw-Sockets das Angeben eines eigenen IP-Headers. |
IPPROTO_IP | IP_TOS | int | Legt den Wert für das IP-Header-Feld Type of service fest. |
IPPROTO_IP | IP_TTL | int | Legt den Wert für das IP-Header-Feld Time to live fest. |
IPPROTO_TCP | TCP_NODELAY | int | Deaktiviert den Nagle-Algorithmus, der das Senden kleiner Datenmengen verhindert. |
Wenn der Wert der Socket-Option erfolgreich gesetzt wurde wird 0 zurückgegeben, im Fehlerfall -1.