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*/ (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:
|
| 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:
|
| OptionName |
|
| OptionName | In der folgenden Liste sind die Optionen für die TCP-Protokollebene in der Datei netinet/tcp.h definiert:
|
| OptionName |
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 :
|
| OptionName |
In der folgenden Liste werden Optionen für die Protokollstufe IPPROTO_TCP definiert, die in der Datei netinet/sctp.h enthalten sind:
|
| 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:
|
| 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. |
|
|
| Ermöglicht dem Benutzer, den Grenzwert für abgehende Hops für Unicast- IPv6 -Pakete festzulegen |
|
||
| Ermöglicht dem Benutzer, den Grenzwert für abgehende Hops für Multicast- IPv6 -Pakete festzulegen |
|
||
| 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. |
|
||
| 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. |
|
||
| Verknüpft eine Multicastgruppe in einer angegebenen lokalen Schnittstelle Wenn der Schnittstellenindex als 0 angegeben ist, wählt der Kernel die lokale Schnittstelle aus. |
|
||
| Belässt eine Multicastgruppe auf einer angegebenen Schnittstelle. |
|
||
| 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. |
|
||
| Bewirkt, dass die IPv6 -Zieladresse und der eingehende Schnittstellenindex eingehender IPv6 -Pakete als Hilfsdaten über UDP und Rohsockets empfangen werden. |
|
||
| Bewirkt, dass der Hop-Grenzwert eingehender IPv6 -Pakete als Hilfsdaten über UDP und unformatierte Sockets empfangen wird. |
|
||
| Bewirkt, dass die Datenverkehrsklasse eingehender IPv6 -Pakete als Hilfsdaten über UDP und Rohsockets empfangen wird. |
|
||
| Bewirkt, dass der Routing-Header (sofern vorhanden) eingehender IPv6 -Pakete als Hilfsdaten über UDP und unformatierte Sockets empfangen werden. |
|
||
| Bewirkt, dass der Header der Hopoptionen (sofern vorhanden) eingehender IPv6 -Pakete als Hilfsdaten über UDP und unformatierte Sockets empfangen wird. |
|
||
| Bewirkt, dass der Zieloptionsheader (falls vorhanden) eingehender IPv6 -Pakete als Hilfsdaten über UDP und unformatierte Sockets empfangen werden. |
|
||
| 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. |
|
||
| 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. |
|
||
| Legt die Datenverkehrsklasse für abgehende IPv6 -Datenpakete auf diesem Socket fest. Um diese Option zu deaktivieren, kann die Anwendung -1 als Wert angeben. |
|
||
| 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. |
|
||
| 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. |
|
||
| 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. |
|
||
| 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. |
|
||
| Legt diese Option fest, um die IPv6 -Pfad-MTU-Erkennung zu steuern. |
|
||
| 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. |
|
||
| Aktiviert den Empfang von IPV6_PATHMTU -Hilfsdatenelementen durch Festlegen dieser Option. |
|
||
| Legt die Adressauswahlvorgaben für diesen Socket fest. |
|
||
| 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. |
|
||
| Belässt die Multicastgruppe wie im Parameter OptionValue der Struktur group_req angegeben. |
|
||
| Blockiert Daten aus der angegebenen Quelle an die angegebene Multicastgruppe. |
|
||
| 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. |
|
||
| 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. |
|
||
| 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 . |
|
||
| 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. |
|
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));