|
Beschreibung
Mit der Funktion t_rcvuderr() kann der Benutzer im verbindungslosen Modus Informationen abfragen, die sich auf einen Fehler bei einem zuvor abgeschickten oder empfangenen Datagramm beziehen. t_rcvuderr() sollte nur nach einer Fehleranzeige aufgerufen werden.
Der Parameter fd spezifiziert den lokalen Transportendpunkt, über den die Fehlermeldung empfangen wird. Der Parameter uderr ist ein Zeiger auf ein Objekt vom Typ struct t_uderr.
Die Struktur t_uderr ist in <xti.h> wie folgt deklariert:
struct t_uderr { struct netbuf addr; struct netbuf opt; long error; };
Vor Aufruf von t_rcvuderr() muss der Benutzer in uderr->addr die Komponente maxlen mit dem Wert für die jeweils maximale Puffergröße versorgen.
Die Rückgabe protokollspezifischer Optionen in uderr->opt wird vom Transportanbieter nicht unterstützt.
In uderr->error liefert t_uderr() einen protokollspezifischen Fehlercode zurück. Dieser Fehlercode entspricht einem der möglichen Werte für die Fehlervariable errno (definiert in <errno.h>). Folgende Codes sind derzeit möglich:
EADDRNOTAVAIL
Der Partner, an den das zuletzt mit t_sndudata() verschickte Datagramm gesendet werden sollte, ist nicht erreichbar.
ENETDOWN
Der Transportendpunkt wurde durch das Transportsystem von diesem getrennt. In diesem Fall sollte der Benutzer den Transportendpunkt mit t_close() schließen.
Wenn der Benutzer das fehlerhafte Datagramm nicht ermitteln will, kann er beim Aufruf von t_rcvuderr() den Null-Zeiger als aktuellen Parameter für uderr angeben.
Returnwert
0:
Bei Erfolg.
-1:
Bei Fehler. t_ errno wird gesetzt, um den Fehler anzuzeigen.
Fehler
TBADF
Der angegebene Dateideskriptor verweist nicht auf einen Transportendpunkt.
TBUFOVFLW
Die Anzahl der Bytes, die für die zurückzuliefernde Protokolladresse oder die Optionen angelegt wurde, ist zu klein, um diese Informationen zu speichern. Die Informationen, die in *uderr zurückzuliefern sind, werden nicht berücksichtigt.
TNOTSUPPORT
Diese Funktion wird vom darunter liegenden Transportanbieter nicht unterstützt.
TNOUDERR
Zurzeit liegt auf dem angegebenen Transportendpunkt keine Fehlermeldung zu einem Datagramm vor.
TSYSERR
Während der Ausführung dieser Funktion ist ein Systemfehler aufgetreten.