setsockopt, Subroutine

Zweck

Legt die Socket-Optionen fest.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/atmsock.h> /*Needed for SOCK_CONN_DGRAM socket type 
only*/
int setsockopt
(Socket, Level, OptionName, OptionValue, OptionLength)
int  Socket,  Level,  OptionName;
const void * OptionValue;
socklen_t  OptionLength;

Beschreibung

Die Subroutine setsockopt legt Optionen für einen Socket fest. Optionen können auf mehreren Protokollebenen vorhanden sein. Die Optionen sind immer auf der obersten Socketebene vorhanden.

Die Subroutine setsockopt stellt einem Anwendungsprogramm Mittel zur Steuerung einer Socketkommunikation zur Verfügung. Ein Anwendungsprogramm kann die Subroutine setsockopt verwenden, um Debugging auf Protokollebene zu aktivieren, Pufferspeicher zuzuordnen, Zeitlimitüberschreitungen zu steuern oder Socket-Datenbroadcasts zuzulassen. Die Datei /usr/include/sys/socket.h definiert alle Optionen, die für die Subroutine setsockopt verfügbar sind.

Geben Sie beim Festlegen von Socketoptionen die Protokollebene, auf der sich die Option befindet, und den Namen der Option an.

Verwenden Sie die Parameter OptionValue und OptionLength , um auf Optionswerte für die Subroutine setsockopt zuzugreifen. Diese Parameter geben einen Puffer an, in dem der Wert für die angeforderte (n) Option (n) zurückgegeben wird.

Alle Anwendungen, die die Subroutine setsockopt enthalten, müssen mit einem bestimmten Wert für das Makro _BSD kompiliert werden. Zulässige Werte sind 43 und 44. Außerdem müssen alle Socketanwendungen die BSD-Bibliothek libbsd.a enthalten.

Parameter

Element Beschreibung
Socket Gibt den eindeutigen Socketnamen an.
Grad Gibt die Protokollstufe an, auf der sich die Option befindet. So legen Sie Optionen fest:
Socketversion
Gibt den Parameter Stufe als SOL_SOCKETan.
Andere Ebenen
Gibt die entsprechende Protokollnummer für das Protokoll an, das die Option steuert. Um beispielsweise anzugeben, dass eine Option vom TCP-Protokoll interpretiert wird, setzen Sie den Parameter Stufe auf die Protokollnummer von TCP, wie in der Datei netinet/in.h definiert. Um anzugeben, dass eine Option vom ATM-Protokoll interpretiert wird, setzen Sie den Parameter Stufe auf NDDPROTO_ATM, wie in sys/atmsock.hdefiniert.
OptionName Gibt die Option an, die festgelegt wird. Der Parameter OptionName und alle angegebenen Optionen werden zur Interpretation nicht interpretiert an das entsprechende Protokollmodul übergeben. Die Datei sys/socket.h definiert die Optionen für die Socketprotokollstufe. Die Datei netinet/tcp.h definiert die Optionen auf TCP-Protokollebene. Die Optionen auf Socketebene können aktiviert oder inaktiviert werden. Sie werden ein-und ausgeschaltet.

In der folgenden Liste werden die Optionen auf Socketprotokollebene in der Datei sys/socket.h definiert:

SO_DEBUG (SO_DEBUG)
Aktiviert die Aufzeichnung von Debuginformationen. Diese Option aktiviert oder inaktiviert das Debugging in den zugrunde liegenden Protokollmodulen. Setzen Sie diese Option auf Befehlsebene auf eine der folgenden Arten:
  • Verwenden Sie den Befehl sodebug , der diese Option für vorhandene Sockets aktiviert oder inaktiviert.
  • Geben Sie |DEBUG[=level] im wait/nowait -Feld eines Service in inetd.conf an, um diese Option für den bestimmten Service zu aktivieren.
  • Setzen Sie den Parameter sodebug_env auf nound geben Sie SODEBUG=level in der Prozessumgebung an. Diese Option wird für alle nachfolgenden Sockets, die vom Prozess erstellt werden, aktiviert oder inaktiviert.
Der Wert für Ebene kann min, normaloder detailsein.
SO_REUSEADDR
Gibt an, dass die Regeln für die Validierung von Adressen, die von einer Subroutine bind bereitgestellt werden, die Wiederverwendung eines lokalen Ports ermöglichen sollen.

Mit SO_REUSEADDR kann eine Anwendung die nachfolgende Subroutine bind explizit an den Port/die Adresse des Sockets zurückweisen, wenn SO_REUSEADDR festgelegt ist. Dies ermöglicht einer Anwendung, die Bindung anderer Anwendungen mit der Subroutine bind zu blockieren.

SO_REUSEPORT
Gibt an, dass die Regeln, die bei der Validierung von Adressen verwendet werden, die von einer Subroutine bind bereitgestellt werden, die Wiederverwendung einer Kombination aus lokalem Port und Adresse ermöglichen sollen. Jede Bindung der Kombination aus Port und Adresse muss die Socketoption SO_REUSEPORT angeben.
SO_CKSUMREV
Aktiviert Leistungsverbesserungen in den Protokollschichten. Wenn das Protokoll diese Option unterstützt, bewirkt die Aktivierung, dass das Protokoll die Kontrollsummenprüfung verzögert, bis die Daten des Benutzers in den Puffer des Benutzers verschoben werden (im Thread recv, recvfrom, readoder recvmsg ). Dies kann dazu führen, dass Anwendungen bei einem Kontrollsummenfehler aktiviert werden, wenn keine Daten verfügbar sind. In diesem Fall wird EAGAIN zurückgegeben. Anwendungen, die diese Option festlegen, müssen den EAGAIN-Fehlercode von einem Empfangsaufruf verarbeiten.
SO_KEEPALIVE
Überwacht die Aktivität einer Verbindung durch Aktivieren oder Inaktivieren der periodischen Übertragung von ACK-Nachrichten an einem verbundenen Socket. Die Leerlaufzeit kann mit dem TCP/IP-Befehl no festgelegt werden. Unterbrochene Verbindungen werden in "Understanding Socket Types and Protocols" im Handbuch Communications Programming Conceptserläutert.
OptionName
SO_DONTROUTE (Standardroute)
Wendet das Routing nicht auf abgehende Nachrichten an Gibt an, dass abgehende Nachrichten die Standard-Routing-Funktionen umgehen sollen Stattdessen werden sie entsprechend dem Netzabschnitt der Zieladresse an die entsprechende Netzschnittstelle weitergeleitet.
SO_BROADCAST
Lässt das Senden von Broadcastnachrichten zu
SO_LINGER (SO_LINGER)
Verweilt in einer Subroutine close , wenn Daten vorhanden sind. Diese Option steuert die Aktion, die ausgeführt wird, wenn eine nicht gesendete Nachrichtenwarteschlange für ein Socket vorhanden ist und ein Prozess eine Subroutine close für das Socket ausführt.

Ist SO_LINGER gesetzt, blockiert das System den Prozess während der Subroutine close , bis die Daten übertragen werden können oder die Zeit abläuft. Wenn SO_LINGER nicht angegeben und eine Subroutine close ausgegeben wird, verarbeitet das System den Aufruf so, dass der Prozess so schnell wie möglich fortgesetzt werden kann.

Die Datei sys/socket.h definiert die linger -Struktur, die das Member l_linger für die Angabe des Verweilzeitintervalls enthält. Wenn die Verweilzeit auf einen Wert ungleich 0 gesetzt ist, versucht das System, alle Nachrichten zu senden, die am Socket in die Warteschlange gestellt wurden. Der Maximalwert, auf den das Member l_linger gesetzt werden kann, ist 65535. Wenn die Anwendung SPEC1170 -konformes Verhalten durch Exportieren der Umgebungsvariablen XPG_SUS_ENV angefordert hat, beträgt die Verweilzeit n Sekunden. Andernfalls beträgt die Verweilzeit n/100 Sekunden (Ticks), wobei n der Wert des Members l_linger ist.

SO_OBINLINE (SO_OOBINLINE)
Verlässt empfangene Out-of-band-Daten (Daten als dringend markiert) in der Zeile.
SO_SNDBUF
Legt die Größe des Sendepuffers fest.
SO_RCVBUF
Legt die Empfangspuffergröße fest.
SO_SNDLOWAT
Legt die untere Grenze für das Senden fest.
SO_RCVLOWAT
Legt die untere Grenze für den Empfang fest.
SO_SNDTIMEO
Legt die maximale Zeitspanne fest, die eine Funktion vom Typ send, die mit socket aufgerufen wird, z. B. send oder write , blockiert bleiben kann, bevor sie beendet wird. Die Option SO_SNDTIMEO erfordert eine Struktur TIMEVAL . Die Struktur TIMEVAL enthält die Anzahl der Sekunden und Mikrosekunden. Sie können den Wert TIMEVAL in Mikrosekunden angeben. Die internen TCP/IP-Timer, die zur Implementierung dieser Funktion verwendet werden, haben jedoch eine Granularität von 10 Millisekunden. Wenn der Timeout-Wert auf einen Wert von weniger als 10 Millisekunden gesetzt wird, führt dies zu demselben Verhalten wie wenn der Timeout-Wert nicht gesetzt wird.
SO_RCVTIMEO
Legt die maximale Zeitspanne fest, die eine Funktion vom Typ Receive, die mit Socket aufgerufen wird, z. B. die Unterprogramme recv oder read , warten kann, bevor sie beendet wird. Die Option SO_RCVTIMEO erfordert eine Struktur TIMEVAL . Die Struktur TIMEVAL enthält die Anzahl der Sekunden und Mikrosekunden. Sie können den Wert TIMEVAL in Mikrosekunden angeben. Die internen TCP/IP-Timer, die zur Implementierung dieser Funktion verwendet werden, haben jedoch eine Granularität von 10 Millisekunden. Wenn der Timeout-Wert auf einen Wert von weniger als 10 Millisekunden gesetzt wird, führt dies zu demselben Verhalten wie wenn der Timeout-Wert nicht gesetzt wird.
SO_FEHLER
Legt den Abruf und das Löschen des Fehlerstatus fest.
SO_TYPE
Legt den Abruf eines Socket-Typs fest.
OptionName

In der folgenden Liste sind die Optionen für die TCP-Protokollebene in der Datei netinet/tcp.h definiert:

TCP_CWND_IF
Erhöht den Faktor des TCP-Überlastungsfensters (cwnd) während der Überlastungsvermeidung. Der Wert muss im Bereich von 0 bis 100 liegen (0 ist inaktiviert). Die Netzoptimierungsoption tcp_cwnd_modified muss aktiviert sein.
TCP-CWND_DF
Verringern Sie den Faktor des TCP-cwnd während der Überlastungsvermeidung. Der Wert muss im Bereich von 0 bis 100 liegen (0 ist inaktiviert). Die Netzoptimierungsoption tcp_cwnd_modified muss aktiviert sein.
TCP_NOTENTER_SSTART
Verhindert, dass der langsame Start nach dem Zeitlimit für die erneute Übertragung erneut gestartet wird, wodurch der cwnd möglicherweise auf die ursprüngliche Fenstergröße zurückgesetzt wird, anstatt die Größe des aktuellen Schwellenwerts für den langsamen Start (ss_threshold) oder die Hälfte des maximalen cwnd (max cwnd/2) zu verwenden. Die Werte sind 1 für 'enable' und 0 für 'disable'. Die Netzoptimierungsoption tcp_cwnd_modified muss aktiviert sein.
TCP_ NOREDUCE_CWND_IN_FRXMT
Verringern Sie nicht die cwnd-Größe in der Phrase Fast retransmit. Die Werte sind 1 für 'enable' und 0 für 'disable'. Die Netzoptimierungsoption tcp_cwnd_modified muss aktiviert sein.
TCP_ NOREDUCE_CWND_EXIT_FRXMT
Verringern Sie die cwnd-Größe nicht, wenn die Phrase für schnelle erneute Übertragung beendet wird. Die Werte sind 1 für 'enable' und 0 für 'disable'. Die Netzoptimierungsoption tcp_cwnd_modified muss aktiviert sein.
TCP-KEEPCNT
Gibt die maximale Anzahl der Keepalive-Pakete an, die gesendet werden sollen, um eine Verbindung zu validieren Dieser Wert für die Socketoption wird vom übergeordneten Socket übernommen. Der Standardwert ist 8.
TCP-KEEPIDLE
Gibt die Leerlaufzeit (in Sekunden) für eine Verbindung an, nach der TCP ein Keepalive-Paket sendet. Dieser Socketoptionswert wird vom übergeordneten Socket aus dem Systemaufruf accept übernommen. Der Standardwert ist 7200 Sekunden (14400 Halbsekunden).
TCP_KEEPINTVL
Gibt das Zeitintervall zwischen Keepalive-Paketen an. Sie wird in Sekunden gemessen. Dieser Socketoptionswert wird vom übergeordneten Socket aus dem Systemaufruf accept übernommen. Der Standardwert ist 75 Sekunden (150 Halbsekunden).
tcp_nodelay
Gibt an, ob TCP dem Nagle-Algorithmus folgen soll, um zu entscheiden, wann Daten gesendet werden. Standardmäßig folgt TCP dem Nagle-Algorithmus. Um dieses Verhalten zu inaktivieren, können Anwendungen TCP_NODELAY aktivieren, um TCP zu zwingen, Daten immer sofort zu senden. TCP_NODELAY sollte beispielsweise verwendet werden, wenn eine Anwendung TCP für eine Anforderung/Antwort verwendet.
OptionName
TCP_RFC1323
Aktiviert oder inaktiviert RFC-1323-Erweiterungen am angegebenen TCP-Socket. Eine Anwendung kann die folgenden Zeilen enthalten, um RFC 1323 zu aktivieren:
int on=1;
setsockopt(s,IPPROTO_TCP,TCP_RFC1323,&on,
           sizeof(on));
TCP_STDURG
Aktiviert oder inaktiviert die RFC 1122-konforme Behandlung dringender Punkte. Standardmäßig implementiert TCP ein dringliches Zeigerverhalten, das mit dem BSD-Betriebssystem 4.2 kompatibel ist, d. h., diese Option hat den Standardwert 0.
TCP-KNOTENLAYACK
Gibt an, ob TCP sofortige Bestätigungspakete an den Sender senden muss Wenn diese Option nicht festgelegt ist, verzögert TCP das Senden der Bestätigungspakete um bis zu 200 ms. Dadurch können die Bestätigungen zusammen mit den Daten in einer Antwort gesendet werden und der Systemaufwand wird minimiert. Das Festlegen dieser TCP-Option kann zu einem leichten Anstieg des Systemaufwands führen, kann aber zu einer höheren Leistung bei Netzübertragungen führen, wenn der Sender auf die Bestätigung des Empfängers wartet.

Socketoptionen auf TCP-Protokollebene werden von empfangsbereiten Sockets auf neue Sockets übernommen.

Die folgende Liste definiert Optionen auf ATM-Protokollebene in der Datei sys/atmsock.h :

SO_ATM_PARAM
Legt alle ATM-Parameter fest. Diese Socketoption kann verwendet werden, anstatt einzelne Socketoptionen zu verwenden, die im Folgenden beschrieben werden. Sie verwendet die Struktur connect_ie , die in der Datei sys/call_ie.h definiert ist.
SO_ATM_AAL_PARM
Legt die ATM-AAL-Parameter (Adaptation Layer) fest. Sie verwendet die aal_parm -Struktur, die in der Datei sys/call_ie.h definiert ist.
SO_ATM_VERKEHR_DES
Legt ATM Traffic Descriptor-Werte fest. Sie verwendet die Struktur traffic , die in der Datei sys/call_ie.h definiert ist.
SO_ATM_TRÄGER
Legt die ATM-Trägerfunktionalität fest. Sie verwendet die Struktur bearer , die in der Datei sys/call_ie.h definiert ist.
SO_ATM_BHLI
Legt ATM-Breitband-High-Layer-Informationen fest. Es verwendet die bhli -Struktur, die in der Datei sys/call_ie.h definiert ist.
SO_ATM_BLLI
Legt ATM-Broadband-Low-Layer-Informationen fest. Sie verwendet die blli -Struktur, die in der Datei sys/call_ie.h definiert ist.
SO_ATM_QOS
Legt die Servicequalitätswerte für Geldautomaten fest. Sie verwendet die Struktur qos_parm , die in der Datei sys/call_ie.h definiert ist.
SO_ATM_TRANSIT_SEL
Legt den ATM Transit Selector Carrier fest. Sie verwendet die in der Datei sys/call_ie.h definierte Struktur transit_sel .
OptionName
SO_ATM_AKZEPTIEREN
Gibt die Annahme eines ankommenden ATM-Anrufs an, der der Anwendung über den Systemaufruf ACCEPT angezeigt wurde. Dies müssen Probleme sein, damit die eingehende Verbindung vollständig hergestellt werden kann. Dies ermöglicht die Festlegung von ATM-Parametern.
SO_ATM_MAX_PEND
Legt die Anzahl der ausstehenden Übertragungspuffer fest, die zulässig sind, bevor infolge einer Übertragungsoperation eine Fehlermeldung an Anwendungen zurückgegeben wird. Diese Option ist nur für virtuelle Verbindungen gültig, die keine Best-Effort-Verbindungen sind. OptionValue/OptionLength verweisen auf ein Byte, das den Wert enthält, auf den dieser Parameter gesetzt wird.

In der folgenden Liste werden Optionen für die Protokollstufe IPPROTO_TCP definiert, die in der Datei netinet/sctp.h enthalten sind:

SCTP_PEER_ADDR_PARAMS
Aktiviert oder inaktiviert Überwachungssignale für eine Zuordnung und ändert das Überwachungssignalintervall der Zuordnung. Diese Option verwendet die Struktur sctp_paddrparams , die in der Datei netinet/sctp.h definiert ist. Für das Feld spp_address unterstützt AIX® jetzt nur Platzhalteradressen. Die Flags SPP_HB_ENABLE, SPP_HB_DISABLEund SPP_HB_TIME_ISZERO werden für das Feld spp_flags unterstützt. Das Feld spp_hbinterval kann auf einen Mindestwert von 50 Millisekunden gesetzt werden.
SCTP_MAXSEG
Legt die maximale Größe jedes abgehenden Chunks SCTP-Daten fest. Wenn die Nachricht größer als die angegebene Größe ist, wird sie von SCTP in die angegebene Größe fragmentiert. Sie verwendet die Struktur sctp_assoc_value , die in der Datei netinet/sctp.h definiert ist.
OptionValue Der Parameter OptionValue akzeptiert einen Parameter Int . Um eine boolesche Option zu aktivieren, setzen Sie den Parameter OptionValue auf einen Wert ungleich null. Um eine Option zu inaktivieren, setzen Sie den Parameter OptionValue auf 0.

Die folgenden Optionen aktivieren und inaktivieren auf dieselbe Weise:

  • SO_DEBUG (SO_DEBUG)
  • SO_REUSEADDR
  • SO_KEEPALIVE
  • SO_DONTROUTE (Standardroute)
  • SO_BROADCAST
  • SO_OBINLINE (SO_OOBINLINE)
  • SO_LINGER (SO_LINGER)
  • TCP_RFC1323
OptionLength Der Parameter OptionLength enthält die Größe des Puffers, auf den der Parameter OptionValue verweist.

Optionen auf anderen Protokollebenen variieren in Format und Name.

Element Beschreibung
IP-DONTFRAG Setzt das DF-Bit ab jetzt für jedes Paket im IP-Header. Um eine Verringerung der Pfad-MTU zu erkennen, verwenden UDP-Anwendungen die Option IP_DONTFRAG .
IP-FINDPMTU Legt die Aktivierung/Inaktivierung der PMTU-Erkennung für diesen Pfad fest. Die Erkennung der MTU für den Pfad auf Protokollebene sollte aktiviert sein, damit die Erkennung ausgeführt werden kann.
IP_PMTUAGE Legt das Alter von PMTU fest Gibt die Häufigkeit der Erkennung von PMT-Reduktionen für die Sitzung an Wenn Sie den Wert auf 0 (null) setzen, bedeutet dies, dass das Alter unendlich ist und die PMTU-Verkleinerungserkennung nicht versucht wird. Dadurch wird das zuvor festgelegte PMTU-Alter ersetzt. Das neue PMTU-Alter ist nach Ablauf des aktuell festgelegten Zeitgebers wirksam. Diese Option wird derzeit nicht verwendet, da UDP-Anwendungen das Socket IP_DONTFRAG festlegen müssen, um Abnahmen in PMTU sofort zu erkennen.
IP-TTL Legt das Feld für die Lebensdauer im IP-Header für jedes Paket fest. Bei Rohsockets wird jedoch der Standardwert für MAXTTL verwendet, wenn die Nachrichten gesendet werden, unabhängig von dem Wert, der mit der Subroutine setsockopt festgelegt wurde.
IP-HDRINCL Mit dieser Option können Benutzer einen eigenen IP-Header erstellen. Sie gibt an, daß der vollständige IP-Header in den Daten enthalten ist und nur für unformatierte Sockets verwendet werden kann.
IP_MITGLIEDSCHAFT_HINZUFÜGEN Verknüpft eine Multicastgruppe, wie im Parameter OptionValue des Strukturtyps ip_mreq angegeben.
IP_DROP_MITGLIEDSCHAFT Lässt eine Multicastgruppe wie im Parameter OptionValue des Strukturtyps ip_mreq angegeben.
IP_MULTICAST_IF Ermöglicht das Senden von Multicastnachrichten über eine Schnittstelle, wie im Parameter OptionValue des Strukturtyps ip_addr angegeben. Die Adresse INADDR_ANY (0x000000000) entfernt die vorherige Auswahl einer Schnittstelle in den Multicastoptionen. Wird keine Schnittstelle angegeben, wird die Schnittstelle verwendet, die zur Standardroute führt.
IP_MULTICAST-SCHLEIFE Legt Multicast-Loopback fest, mit dem festgelegt wird, ob übertragene Nachrichten an den sendenden Host zugestellt werden. Ein Parameter OptionValue des Typs char steuert, ob die Schleife aktiviert oder inaktiviert wird.
IP_MULTICAST_TTL Legt die Lebensdauer (TTL) für Multicastpakete fest. Ein Parameter OptionValue des Typs char legt einen TTL-Wert von 0 bis 255 fest.
IP_BLOCK_SOURCE (IP_BLOCK_SOURCE) Blockiert Daten aus einer bestimmten Quelle für eine bestimmte Gruppe.
IP_UNBLOCK_QUELLE Entsperrt eine blockierte Quelle (um die Operation IP_BLOCK_SOURCE rückgängig zu machen).
IP_ADD_SOURCE_MEMBERSHIP Verknüpft eine quellenspezifische Multicastgruppe. Wenn der Host Mitglied der Gruppe ist, akzeptieren Sie Daten aus der Quelle. Andernfalls verknüpfen Sie die Gruppe und akzeptieren Daten aus der angegebenen Quelle.
IP_DROP_SOURCE_MITGLIEDSCHAFT Verlässt eine quellenspezifische Multicastgruppe. Löscht die Quelle aus der angegebenen Multicastgruppenliste. Um alle Quellen einer bestimmten Gruppe zu löschen, verwenden Sie die Socketoption IP_DROP_MEMBERSHIP .
Element Beschreibung Wert
IPPROTO_IPV6 Beschränkt AF_INET6 -Sockets auf die IPv6 -Kommunikation.
Optionstyp:
int (Boolesche Interpretation)
  Ermöglicht dem Benutzer, den Grenzwert für abgehende Hops für Unicast- IPv6 -Pakete festzulegen
Optionstyp:
int (x)
Optionswert:
x < -1 Fehler EINVAL
x == -1 Kernel-Standard verwenden
0 < = x < = 255 Verwenden
x x > = 256 Fehler EINVAL
  Ermöglicht dem Benutzer, den Grenzwert für abgehende Hops für Multicast- IPv6 -Pakete festzulegen
Optionstyp:
int (x)
Optionswert:
Die Interpretation entspricht IPV6_UNICAST_HOPS (siehe oben).
  Ermöglicht dem Benutzer die Angabe der Schnittstelle, die für abgehende Multicastpakete verwendet wird. Wird 0 angegeben, wählt das System die Ausgangsschnittstelle aus.
Optionstyp:
unsigned int (Index der zu verwendenden Schnittstelle)
  Wenn ein Multicastdatagramm an eine Gruppe gesendet wird, zu der der sendende Host gehört, wird eine Kopie des Datagramms von der IP-Schicht für die lokale Zustellung zurückgeschleift (wenn die Option auf 1 gesetzt ist). Wenn die Option auf 0 gesetzt ist, wird eine Kopie nicht in einer Schleife zurückgeschrieben.
Optionstyp:
unsigned int
  Verknüpft eine Multicastgruppe in einer angegebenen lokalen Schnittstelle Wenn der Schnittstellenindex als 0 angegeben ist, wählt der Kernel die lokale Schnittstelle aus.
Optionstyp:
struct ipv6_mreq , wie in der Datei netinet/in.h definiert
  Belässt eine Multicastgruppe auf einer angegebenen Schnittstelle.
Optionstyp:
struct ipv6_mreq , wie in der Datei netinet/in.h definiert
  Gibt an, dass der Kernel Kontrollsummen über die Daten und den pseudo-IPv6 -Header für einen unformatierten Socket berechnet. Der Kernel berechnet die Kontrollsummen für abgehende Pakete und überprüft Kontrollsummen für eingehende Pakete an diesem Socket. Eingehende Pakete mit falschen Kontrollsummen werden gelöscht. Diese Option ist standardmäßig inaktiviert.
Optionstyp:
int
Optionswert:
Offsets in die Benutzerdaten, in denen das Kontrollsummenergebnis gespeichert werden muss Dies muss ein positiver gleichmäßiger Wert sein. Wird der Wert auf -1 gesetzt, wird die Option deaktiviert.
  Bewirkt, dass die IPv6 -Zieladresse und der eingehende Schnittstellenindex eingehender IPv6 -Pakete als Hilfsdaten über UDP und Rohsockets empfangen werden.
Optionstyp:
int (Boolesche Interpretation)
  Bewirkt, dass der Hop-Grenzwert eingehender IPv6 -Pakete als Hilfsdaten über UDP und unformatierte Sockets empfangen wird.
Optionstyp:
int (Boolesche Interpretation)
  Bewirkt, dass die Datenverkehrsklasse eingehender IPv6 -Pakete als Hilfsdaten über UDP und Rohsockets empfangen wird.
Optionstyp:
int (Boolesche Interpretation)
  Bewirkt, dass der Routing-Header (sofern vorhanden) eingehender IPv6 -Pakete als Hilfsdaten über UDP und unformatierte Sockets empfangen werden.
Optionstyp:
int (Boolesche Interpretation)
  Bewirkt, dass der Header der Hopoptionen (sofern vorhanden) eingehender IPv6 -Pakete als Hilfsdaten über UDP und unformatierte Sockets empfangen wird.
Optionstyp:
int (Boolesche Interpretation)
  Bewirkt, dass der Zieloptionsheader (falls vorhanden) eingehender IPv6 -Pakete als Hilfsdaten über UDP und unformatierte Sockets empfangen werden.
Optionstyp:
int (Boolesche Interpretation)
  Legt die IPv6 -Quellenadresse und den abgehenden Schnittstellenindex für alle IPv6 -Pakete fest, die an diesem Socket gesendet werden. Diese Option kann abgewählt werden, indem eine reguläre Setsockopt mit ipi6_addr = in6addr_any und ipi6_ifindex = 0 ausgeführt wird.
Optionstyp:
struct in6_pktinfo in der Datei netinet/in.h definiert.
  Legt den nächsten Hop für abgehende IPv6 -Datenpakete an diesem Socket fest. Diese Option kann abgewählt werden, indem eine normale setsockopt -Option mit einer Länge von 0 verwendet wird. Beachten Sie, dass in diesem Fall noch ein Speicherzeiger für den Optionswert angegeben werden muss.
Optionstyp:
struct sockaddr_in6 definiert in der Datei netinet/in.h .
  Legt die Datenverkehrsklasse für abgehende IPv6 -Datenpakete auf diesem Socket fest. Um diese Option zu deaktivieren, kann die Anwendung -1 als Wert angeben.
Optionstyp:
int (x)
Optionswert:
x < -1 Fehler EINVAL
x == -1 Kernel-Standard verwenden
0 < = x < = 255 Verwenden
x x > = 256 Fehler EINVAL
  Legt den Routing-Header fest, der für abgehende IPv6 -Datagramme an diesem Socket verwendet wird. Diese Option kann abgewählt werden, indem eine normale setsockopt -Option mit einer Länge von 0 verwendet wird. Beachten Sie, dass in diesem Fall noch ein Speicherzeiger für den Optionswert angegeben werden muss.
Optionstyp:
Struktur ip6_rthdr , die in der Datei netinet/ip6.h definiert ist.
  Legt den Header für Hopoptionen fest, der für abgehende IPv6 -Datagramme an diesem Socket verwendet werden soll. Diese Option kann abgewählt werden, indem eine normale setsockopt -Option mit einer Länge von 0 verwendet wird. Beachten Sie, dass in diesem Fall noch ein Speicherzeiger für den Optionswert angegeben werden muss.
Optionstyp:
struct ip6_hbh , definiert in der Datei netinet/ip6.h .
  Legt den Zieloptionsheader fest, der für abgehende IPv6 -Datenpakete an diesem Socket verwendet werden soll. Dieser Header folgt einem Routing-Header (falls vorhanden) und wird verwendet, wenn kein Routing-Header angegeben ist. Diese Option kann abgewählt werden, indem eine normale setsockopt -Option mit einer Länge von 0 verwendet wird. Beachten Sie, dass in diesem Fall noch ein Speicherzeiger für den Optionswert angegeben werden muss.
Optionstyp:
struct ip6_dest , definiert in der Datei netinet/ip6.h .
  Legt den Zieloptionsheader fest, der für abgehende IPv6 -Datenpakete an diesem Socket verwendet werden soll. Dieser Header steht vor einem Routing-Header (falls vorhanden). Wird kein Routing-Header angegeben, wird diese Option stillschweigend ignoriert. Diese Option kann abgewählt werden, indem eine normale setsockopt -Option mit einer Länge von 0 verwendet wird. Beachten Sie, dass in diesem Fall noch ein Speicherzeiger für den Optionswert angegeben werden muss.
Optionstyp:
struct ip6_dest , definiert in der Datei netinet/ip6.h .
  Legt diese Option fest, um die IPv6 -Pfad-MTU-Erkennung zu steuern.
Optionstyp:
int
Optionstyp:
--1 Führt die Pfad-MTU-Ermittlung für Unicast-Ziele durch, aber nicht für destinations.0 Führt immer Pfad-MTU ' discovery.1 aus Inaktiviert immer die Erkennung der Pfad-MTU und sendet Pakete mit der minimalen MTU.
  Durch das Festlegen dieser Option wird die Fragmentierung abgehender IPv6 -Pakete an diesem Socket verhindert. Wenn ein Paket gesendet wird, das größer als die MTU der abgehenden Schnittstelle ist, wird das Paket gelöscht.
Optionstyp:
int (Boolesche Interpretation)
  Aktiviert den Empfang von IPV6_PATHMTU -Hilfsdatenelementen durch Festlegen dieser Option.
Optionstyp:
int (Boolesche Interpretation)
  Legt die Adressauswahlvorgaben für diesen Socket fest.
Optionstyp:
int
Optionswert:
Kombination der in netinet/in.h definierten Flags IPV6_PREFER_SRC_*
  Verknüpft die Multicastgruppe wie im Parameter OptionValue der Struktur group_req angegeben. Wenn der angegebene Schnittstellenindex 0 ist, wählt der Kernel die Standardschnittstelle aus.
Optionstyp:
Struktur group_req wie in der Datei netinet/in.h definiert
  Belässt die Multicastgruppe wie im Parameter OptionValue der Struktur group_req angegeben.
Optionstyp:
Struktur group_req wie in der Datei netinet/in.h definiert
  Blockiert Daten aus der angegebenen Quelle an die angegebene Multicastgruppe.
Optionstyp:
struct group_source_req , wie in der Datei netinet/in.h definiert
  Hebt die Blockierung von Daten aus der angegebenen Quelle für die angegebene Multicastgruppe auf Die Option wird verwendet, um die Operation MCAST_BLOCK_SOURCE rückgängig zu machen.
Optionstyp:
struct group_source_req , wie in der Datei netinet/in.h definiert
  Verknüpft eine quellenspezifische Multicastgruppe. Wenn der Host bereits Mitglied der Gruppe ist, akzeptieren Sie Daten aus der angegebenen Quelle. Andernfalls verknüpfen Sie die Gruppe und akzeptieren Sie Daten aus der angegebenen Quelle.
Optionstyp:
struct group_source_req , wie in der Datei netinet/in.h definiert
  Verlässt eine quellenspezifische Multicastgruppe. Belässt die angegebene Quelle aus der angegebenen Multicastgruppe. Sollen alle Quellen der Multicastgruppe beibehalten werden, verwenden Sie die Socketoption IPV6_LEAVE_GROUP oder MCAST_LEAVE_GROUP .
Optionstyp:
struct group_source_req , wie in der Datei netinet/in.h definiert
Element Beschreibung Wert
IPPROTO_ICMPV6 Ermöglicht dem Benutzer das Filtern von ICMPV6 -Nachrichten nach dem Typfeld ICMPV6 . Um einen vorhandenen Filter zu löschen, geben Sie einen setsockopt -Aufruf mit der Länge null aus.
Optionstyp:
Die Struktur icmp6_filter , die in der Datei netinet/icmp6.h definiert ist.
Die folgenden Werte (die in der Datei /usr/include/netint/tcp.h definiert sind) werden von der Subroutine setsockopt verwendet, um die dacinet -Funktionen zu konfigurieren.
Hinweis: Die Funktion DACinet ist nur in einem CAPP/EAL4 + konfigurierten AIX -System verfügbar.
tcp.h:#define TCP_ACLFLUSH    0x21    /* clear all DACinet ACLs */
tcp.h:#define TCP_ACLCLEAR    0x22    /* clear DACinet ACL */
tcp.h:#define TCP_ACLADD      0x23    /* Add to DACinet ACL */
tcp.h:#define TCP_ACLDEL      0x24    /* Delete from DACinet ACL */
tcp.h:#define TCP_ACLLS       0x25    /* List DACinet ACL */
tcp.h:#define TCP_ACLBIND     0x26    /* Set port number for TCP_ACLLS */
tcp.h:#define TCP_ACLGID      0x01    /* ID being added to ACL is a GID */
tcp.h:#define TCP_ACLUID      0x02    /* ID being added to ACL is a GID */
tcp.h:#define TCP_ACLSUBNET   0x04    /* address being added to ACL is a subnet */
tcp.h:#define TCP_ACLDENY     0x08    /* this ACL entry is for denying access */

Rückgabewerte

Nach erfolgreicher Ausführung wird der Befehl 0 zurückgegeben.

Ist die Subroutine setsockopt nicht erfolgreich, führt der Subroutinenhandler die folgenden Funktionen aus:

  • Gibt einen Wert von -1 an das aufrufende Programm zurück.
  • Verschiebt einen Fehlercode, der den spezifischen Fehler angibt, in die globale Variable errno .

Fehlercodes

Element Beschreibung
EBADF Der Parameter Socket ist ungültig.
EFAULT Der Parameter Adresse befindet sich nicht in einem beschreibbaren Teil des Benutzeradressraums.
EINVAL Der Parameter OptionValue oder der Parameter OptionLength ist ungültig oder der Socket wurde beendet.
ENOBUFS Es ist nicht genügend Speicher für eine interne Datenstruktur vorhanden.
ENOTSOCK (ENOTSOCK) Der Parameter Socket verweist auf eine Datei, nicht auf ein Socket.
ENOPROTOOPT (ENOPROTOOPT) Die Option ist unbekannt.
EOPNOTSUPP Die Option wird von der Socket-Familie oder dem Socket-Typ nicht unterstützt.
EPERM Die Benutzeranwendung hat keine Berechtigung zum Abrufen oder Festlegen dieser Socketoption. Überprüfen Sie die Option für optimierbare Netzparameter.

Beispiele

  • So markieren Sie einen Socket für Broadcasting:
    int on=1;
    setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
  • Führen Sie den folgenden Befehl aus, um die Option TCP_NODELAYACK zu aktivieren:
    int on=1;
    setsockopt(s, IPPROTO_TCP, TCP_NODELAYACK, &on, sizeof(on));