setsockopt

Deklaration

#include <sys/socket.h>

int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

Beschreibung

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.

Parameter

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.

Liste der portablen Socket-Optionen

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.

Weitere Socket-Optionen

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.

Rückgabewert

Wenn der Wert der Socket-Option erfolgreich gesetzt wurde wird 0 zurückgegeben, im Fehlerfall -1.

Typische Fehler


Zurück