Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

getsockopt(), setsockopt() - Socket-Optionen abfragen und setzen

&pagelevel(4)&pagelevel

#include <sys/socket.h> 
#include <netinet/in.h>

int getsockopt(int s, int level, int optname, void *optval, size_t *optlen);
int setsockopt(int s, int level, int optname, const void *optval, size_t optlen);

Beschreibung

Die Funktionen getsockopt() und setsockopt() lesen oder verändern Optionen, die für einen Socket festgelegt sind. Optionen kann es auf verschiedenen Protokoll-Ebenen geben. Immer gibt es sie auf der höchsten Protokoll-Ebene.

Für den Zugriff auf eine Socket-Option muss der Name optname der Option angegeben werden sowie die Protokoll-Ebene level, auf der die Option interpretiert wird. Um auf Optionen auf der Socket-Ebene zuzugreifen, muss der Benutzer SOL_SOCKET für level angeben.

Mit der Funktion setsockopt() kann der Benutzer über die Parameter optval und optlen die Option-Werte verändern.

Bei der Funktion getsockopt() sind optval und optlen die Adresse und Länge eines Puffers, in dem der Wert der gewünschten Option zurückgeliefert werden soll. Bei Rückkehr der Funktion getsockopt() enthält *optlen die tatsächliche Größe der zurückgelieferten Daten. Hat die Option keinen Wert, der zurückgeliefert werden kann, so erhält *optval den Wert 0.

optname und alle angegebenen Optionen werden ohne Interpretation an das zuständige Protokoll-Modul zur Interpretation weitergereicht. Die Include-Datei <sys/socket.h> enthält Definitionen für die Optionen der Socket-Ebene.

Optionen der Protokoll-Ebene SOL_SOCKET

SO_KEEPALIVE

Gibt an, ob Verbindungen aufrecht erhalten werden oder nicht. SO_KEEPALIVE veranlasst die regelmäßige Übertragung von Kontrollnachrichten über einen verbundenen Socket.

Datentyp des Option-Wertes: int

SO_LINGER

Gibt an, ob nach einem Aufruf von close() das Schließen des Sockets hinausgezögert wird, wenn noch Daten auf dem Socket zum Übertragen anstehen.

Falls SO_LINGER eingeschaltet ist (Strukturelement l_onoff ist nicht 0), dann legt das Strukturelement l_linger das Timeout-Intervall fest.

Datentyp des Option-Wertes: struct linger

SO_BROADCAST

Gibt an, ob Broadcast-Nachrichten übermittelt werden dürfen oder nicht.

Da im BS2000 Broadcast-Nachrichten immer gesendet werden dürfen, hat diese Option keine funktionelle Bedeutung. Zu beachten ist jedoch, dass der Empfang von Brodcast-Nachrichten nicht zugelassen sein kann (siehe BCAM-Kommando BCOPTION im Handbuch "BCAM").

Datentyp des Option-Wertes: int

SO_REUSEADDR

Gibt an, ob die Regeln für die Gültigkeitsprüfung der für bind() angegebenen Adressen die Wiederverwendung lokaler Adressen zulassen sollen, sofern dies vom Protokoll unterstützt wird.

Datentyp des Option-Wertes: int

SO_TYPE

Fragt den Socket-Typ ab.

SO_TYPE ist nur bei getsockopt() erlaubt. SO_TYPE liefert den Typ des Sockets, also entweder SOCK_STREAM oder SOCK_DGRAM.

Datentyp des Option-Wertes: int

SO_ACCEPTCONN

Fragt ab, ob der Socket empfangsbereit für Verbindungsanforderungen ist.

SO_ACCEPTCONN ist nur bei getsockopt() erlaubt.

Datentyp des Option-Wertes: int

SO_SNDBUF

Fragt ab, wie groß der Sendepuffers des Sockets ist.

SO_SNDBUF ist nur bei getsockopt() erlaubt.

Datentyp des Option-Wertes: int

SO_RCVBUF

Fragt ab, wie groß der Empfangspuffers des Sockets ist.

SO_RCVBUF ist nur bei getsockopt() erlaubt.

Datentyp des Option-Wertes: int

Die folgenden Optionen werden zu Diagnosezwecken unterstützt und sind vorwiegend für die internen Gebrauch vorgesehen:

SO_ERROR

Fragt den Fehlercode (errno) ab, der nach dem Aufruf einer Socket-Funktion angezeigt wird.

SO_ERROR ist nur bei getsockopt() erlaubt.

Datentyp des Option-Wertes: int

SO_BS2ERROR

Fragt den Returncode nach Aufruf der BCAM-Schnittstelle $ICO2000 ab. Dieser wird im Strukturelement bcam_rc zurückgeliefert. Zusätzlich wird im Strukturelement bcam_errno der Fehlercode analog zur Option SO_ERROR zurückgeliefert.

SO_BS2ERROR ist nur bei getsockopt() erlaubt.

Datentyp des Option-Wertes: struct so_bs2error

Optionen der Protokoll-Ebene IPPROTO_TCP

TCP_NODELAY

Bei einem Wert ungleich Null deaktiviert diese Option das verzögerte Senden von Datenpaketen mittels des „Nagle-Algorithmus“.

Datentyp des Option-Wertes: int

TCP_NODELAY_ACK

Bei einem Wert ungleich Null deaktiviert diese Option das verzögerte Senden von Quittungen.

Datentyp des Option-Wertes: int

TCP_KEEPALIVE

Bei einem Wert ungleich Null ermöglicht diese Option das Senden von Keep-Alive-Nachrichten an verbindungsorientierten Sockets.

Datentyp des Option-Wertes: int

TCP_KEEPIDLE

Die Zeit (in Sekunden), die die Verbindung im Leerlauf sein muss, bevor das Transportsystem mit dem Senden von Keep-Alive-Nachrichten beginnt. Gilt nur, wenn die Socket-Option SO_KEEPALIVE aktiv ist.

Datentyp des Option-Wertes: int

TCP_KEEPINTVL

Die Zeit (in Sekunden) zwischen Keep-Alive-Nachrichten. Gilt nur, wenn die Socket-Option SO_KEEPALIVE aktiv ist.

Datentyp des Option-Wertes: int

TCP_KEEPCNT

Die maximale Anzahl von Keep-Alive-Nachrichten, die das Transportsystem senden sollte, bevor die Verbindung getrennt wird. Gilt nur, wenn die Socket-Option SO_KEEPALIVE aktiv ist.

Datentyp des Option-Wertes: int

Optionen der Protokoll-Ebene IPPROTO_IP

IP_MULTICAST_IF

Gibt die lokale IPv4-Adresse zum Senden von Multicast-Nachrichten an.

Datentyp des Option-Wertes: int

IP_MULTICAST_TTL

Gibt den Time-to-Live-Wert (Hop-Limit) ausgehender Multicast-Nachrichten an.

Datentyp des Option-Wertes: int

IP_MULTICAST_LOOP

Gibt an, ob gesendete Multicast-Pakete auch an lokale (Loopback-)Sockets gesendet werden sollen.

Datentyp des Option-Wertes: int

IP_ADD_MEMBERSHIP

Aktiviert die Zustellung von Nachrichten an diesen Socket, welche an die angegebene IPv4-Multicast-Gruppe gesendet werden. Gibt die lokale Schnittstellenadresse an (IPv4-Adresse oder INADDR_ANY, nicht INADDR_LOOPBACK).

IP_ADD_MEMBERSHIP ist nur bei setsockopt() erlaubt.

Datentyp des Option-Wertes: struct ip_mreq

IP_DROP_MEMBERSHIP

Deaktiviert die Zustellung von Nachrichten an diesen Socket, welche an die angegebene IPv4-Multicast-Gruppe gesendet werden. Gibt die lokale Schnittstellenadresse an (IPv4-Adresse oder INADDR_ANY, nicht INADDR_LOOPBACK).

IP_DROP_MEMBERSHIP ist nur bei setsockopt() erlaubt.

Datentyp des Option-Wertes: struct ip_mreq

Optionen der Protokoll-Ebene IPPROTO_IPV6

IPV6_UNICAST_HOPS

Gibt das Unicast-Hop-Limit für den Socket an.

Datentyp des Option-Wertes: int

IPV6_MULTICAST_IF

Gibt die Interface-Nummer zum Senden von Multicast-Nachrichten an.

Datentyp des Option-Wertes: int

IPV6_MULTICAST_LOOP

Gibt an, ob gesendete Multicast-Pakete auch an lokale (Loopback-)Sockets gesendet werden sollen.

Datentyp des Option-Wertes: int

IPV6_MULTICAST_HOPS

Gibt das Multicast-Hop-Limit für den Socket an.

Datentyp des Option-Wertes: int

IPV6_ADD_MEMBERSHIP

Aktiviert die Zustellung von Nachrichten an diesen Socket, welche an die angegebene IPv6-Multicast-Gruppe gesendet werden. Gibt die lokale Schnittstelle an (Interface-Index).

IPV6_ADD_MEMBERSHIP ist nur bei setsockopt() erlaubt.

Datentyp des Option-Wertes: struct ipv6_mreq

IPV6_DROP_MEMBERSHIP

Deaktiviert die Zustellung von Nachrichten an diesen Socket, welche an die angegebene IPv6-Multicast-Gruppe gesendet werden. Gibt die lokale Schnittstelle an (Interface-Index).

IPV6_DROP_MEMBERSHIP ist nur bei setsockopt() erlaubt.

Datentyp des Option-Wertes: struct ipv6_mreq

Returnwert

0:

bei Erfolg.

-1:

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

EBADF

Der Parameter s ist kein gültiger Deskriptor.

EFAULT

optval und optlen referenzieren keinen gültigen Adressbereich.

EINVAL

Einer der Parameter level, optval oder optlen hat einen ungültigen Wert.

ENOPROTOOPT

Die Option ist für die angegebene Ebene unbekannt.

ENOTSOCK

Der Deskriptor s referenziert keinen Socket.

EOPNOTSUPP

Die Option wird nicht unterstützt.

Siehe auch

socket(), getprotoent()