getsockopt(3N) getsockopt(3N)
NAME
getsockopt, setsockopt - Socket-Optionen abfragen und setzen
SYNTAX
#include <sys/types.h>
#include <sys/socket.h>
int getsockopt(int s, int level, int optname,
char *optval, int *optlen);
int setsockopt(int s, int level, int optname,
char *optval, int optlen);
BESCHREIBUNG
getsockopt() und setsockopt() manipulieren Optionen, die zu einem
Socket gehören. Es gibt Optionen auf mehreren Protokollebenen, immer
jedoch auf der Socket-Ebene.
Bei der Manipulation von Socket-Optionen müssen die Ebene, zu der die
Option gehört, und der Name der Option angegeben werden. Um Optionen
auf der Socket-Ebene zu manipulieren, ist level durch SOLSOCKET spe-
zifiziert. Um Optionen auf jeder anderen Ebene zu manipulieren, ist
level die Protokollnummer des Protokolls, das die Option verarbeitet.
Um z. B. anzuzeigen, daß eine Option durch das TCP-Protokoll interpre-
tiert werden soll, wird level auf die TCP-Protokollnummer gesetzt
[siehe getprotoent(3N)].
Die Parameter optval und optlen werden für den Zugriff auf Options-
werte für setsockopt() verwendet. Für getsockopt() identifizieren sie
einen Puffer, in dem der Wert (die Werte) für die angefragte(n)
Option(en) zurückgegeben werden soll(en). Für getsockopt() ist optlen
ein Ergebnisparameter, der anfangs mit der Größe des Puffers optval
initialisiert wird und bei Rückkehr des Aufrufs die tatsächliche Größe
von optval anzeigt. Falls kein Optionswert angegeben oder zurückgege-
ben werden soll, kann optval auf 0 gesetzt werden.
optname und jede der angegebenen Optionen werden uninterpretiert an
das entsprechende Protokollmodul zur Interpretation übergeben. Die
Include-Datei /usr/include/sys/socket.h enthält Definitionen für die
unten beschriebenen Optionen der Socket-Ebene SOLSOCKET. Optionen auf
anderen Protokollebenen variieren in Format und Name.
Die meisten Optionen der Socket-Ebene erwarten eine Ganzzahl für
optval. Für setsockopt() sollte der Parameter optval ungleich Null
sein, um eine boolesche Option zu ermöglichen, und er sollte gleich
Null sein, wenn die Option abgeschaltet werden soll. Bei SOLINGER
verweist optval auf eine Struktur struct linger, die den gewünschten
Zustand der Option und den Verzögerungswert ("linger" - siehe unten)
angibt. struct linger ist in /usr/include/sys/socket.h definiert.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
getsockopt(3N) getsockopt(3N)
Die folgenden Optionen sind auf Socket-Ebene (SOLSOCKET) möglich. Bis
auf einige Ausnahmen, auf die hingewiesen wird, kann jede Option mit
getsockopt() abgefragt und mit setsockopt() gesetzt werden.
SODEBUG Informationsaufzeichnung für die Fehleranalyse
(debug)
SOREUSEADDR lokale Adreßwiederverwendung
SOKEEPALIVE Überprüfen von Verbindungen, auf denen kein Daten-
verkehr mehr stattfindet
SODONTROUTE Routing von Paketen ein- bzw. ausschalten
SOLINGER Verzögerung beim Schließen, wenn Daten vorhanden
sind
SOBROADCAST Erlaubnis, Broadcast-Nachrichten zu übertragen
SOOOBINLINE Behandlung von "out-of-band"-Daten in der Eingabe
SOSNDBUF Puffergröße für die Ausgabe
SORCVBUF Puffergröße für die Eingabe
SOTYPE Typ des Sockets feststellen (nur get)
SOERROR Fehlerzustände auf dem Socket feststellen und
löschen (nur get)
SODEBUG ermöglicht die Fehleranalyse in darunterliegenden Protokoll-
modulen.
SOREUSEADDR ermöglicht die Wiederverwendung lokaler Adressen im
bind(3N)-Aufruf.
SOKEEPALIVE überwacht die Verbindung. Ruht die Verbindung für eine
gewisse Zeit (d. h., es erfolgt in dieser Zeit kein Nachrichtenaus-
tausch zwischen den Partnern), so werden periodisch Nachrichten an den
Partner gesendet. Falls der verbundene Partner aus irgendeinem Grunde
nicht auf diese Nachrichten antwortet, wird die Verbindung als unter-
brochen angesehen, und die Prozesse, die auf den Socket zugreifen,
werden durch ein SIGPIPE-Signal benachrichtigt.
SODONTROUTE weist das Sytem an, den normalen Routing-Algorithmus zu
umgehen. In diesem Fall werden Pakete direkt über die Schnittstelle
gesendet, bei der die Netznummer der Schnittstellen-Adresse mit der
Netznummer der Empfängeradresse im Paket übereinstimmt.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
getsockopt(3N) getsockopt(3N)
SOLINGER kontrolliert die Aktionen, die unternommen werden, wenn sich
noch unversendete Nachrichten in der Warteschlange auf dem Socket
befinden während ein close(2) durchgeführt wird. Wenn der Socket
sichere Übertragung von Daten gewährleistet (Socket-Typ SOCKSTREAM)
und SOLINGER gesetzt ist, blockiert das System den Prozeß beim
close()-Versuch, bis es in der Lage ist, die Daten zu übertragen, oder
bis es feststellt, daß die Daten nicht mehr gesendet werden können,
weil z. B. die mit SOLINGER im setsockopt()-Aufruf angegebene maxi-
male Wartezeit (Linger-Time) abgelaufen ist. Falls SOLINGER nicht
aktiviert ist und ein close() durchgeführt wird, wenn noch Daten zum
Senden ausstehen, so kehrt der close()-Aufruf nach kurzer Zeit zurück
und das System versucht, die ausstehenden Daten im Hintergrund zu sen-
den.
Die Option SOBROADCAST fragt ab, ob über den Socket Broadcast-Data-
gramme versendet werden dürfen.
Bei Protokollen, die "out-of-band"-Daten unterstützen, veranlaßt die
Option SOOOBINLINE, daß "out-of-band"-Daten im normalen Datenstrom
empfangen werden. Auf diese kann dann mit den Aufrufen recv() oder
read() ohne die Option MSGOOB zugegriffen werden.
SOSNDBUF und SORCVBUF sind Optionen, die die ursprünglich angelegte
Puffergröße für die Ein- und Ausgabepuffer anpassen. Die Puffergröße
kann für Verbindungen vergrößert werden, die große Datenmengen versen-
den bzw. empfangen. Sie kann aber auch verkleinert werden, um die
Menge noch nicht bestätigter Daten zu begrenzen. Das System setzt eine
absolute Grenze für diese Werte.
Die Optionen SOTYPE und SOERROR werden nur für getsockopt() verwen-
det. SOTYPE liefert den Typ des Sockets zurück (z. B. SOCKSTREAM).
Dies ist nützlich für Server, die Sockets bei ihrem Start erben.
SOERROR liefert am Socket aufgetretene Fehler zurück und löscht den
Fehlerzustand. Es kann zur Überprüfung asynchroner Fehler auf verbun-
denden Datagram-Sockets oder für andere asynchrone Fehler verwendet
werden
RÜCKGABEWERT
Es wird 0 zurückgeliefert, wenn der Aufruf erfolgreich war, andern-
falls -1.
DIAGNOSE
Es können folgende Fehler auftreten:
EBADF Das Argument s ist kein gültiger Deskriptor.
ENOTSOCK Das Argument s verweist nicht auf einen Socket.
ENOPROTOOPT Die Option ist auf der angegebenen Ebene nicht
bekannt.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
getsockopt(3N) getsockopt(3N)
ENOMEM Es war nicht genügend Speicher vorhanden, um die Ope-
ration durchzuführen.
ENOSR Es waren nicht genügend STREAMS-Betriebsmittel vorhan-
den, um die Operation durchzuführen.
SIEHE AUCH
ioctl(2), socket(3N), getprotoent(3N), ip(7).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98