|
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.