Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

t_rcvconnect() - Status einer Verbindungsanforderung abfragen

&pagelevel(4)&pagelevel

#include <xti.h>

int t_rcvconnect(int fd, struct t_call *call);

Beschreibung

Mit der Funktion t_rcvconnect() kann der Transportbenutzer den Status einer Verbindung ermitteln, die er zuvor mit t_connect() im asynchronen Modus angefordert hat. Im asynchronen Modus wird t_rcvconnect() in Verbindung mit t_connect() verwendet, um eine Verbindung einzurichten. Nach erfolgreicher Ausführung von t_rcvconnect() ist die Verbindung eingerichtet.

Der Parameter fd spezifiziert den lokalen Transportendpunkt, auf dem die zuvor mit t_connect() angeforderte Verbindung eingerichtet werden soll. Der Parameter call zeigt auf ein Objekt vom Typ struct t_call, in dem t_rcvconnect() Informationen über die zuvor mit t_connect() angeforderte Verbindung zurückliefert.

Die Struktur t_call ist in <xti.h> wie folgt deklariert:

struct t_call {
   struct netbuf addr;
   struct netbuf opt;
   struct netbuf udata;
   int sequence;
};

In call->addr liefert t_rcvconnect() die Protokolladresse des antwortenden Transportendpunkts.

Die Rückgabe von protokollspezifischen Informationen in call->udata sowie von Benutzerdaten in call->udata wird vom Transportanbieter nicht unterstützt.

call->sequence ist für die Funktion t_rcvconnect() ohne Bedeutung.

Vor Aufruf von t_rcvconnect() muss der Benutzer in den einzelnen netbuf-Strukturen von *call die Komponente maxlen mit dem Wert für die jeweils maximale Puffergröße versorgen.

Als aktueller Parameter für call kann auch der Null-Zeiger übergeben werden. In diesem Fall liefert t_rcvconnect() keine Informationen an den Benutzer zurück.

Im Standardfall arbeitet t_rcvconnect() im synchronen Modus. Im synchronen Modus wartet t_rcvconnect() auf eine Bestätigung der zuvor mit t_connect() angeforderten Verbindung und gibt erst nach Empfang der Bestätigung die Kontrolle wieder an den aufrufenden Transportbenutzer zurück. Nach Ausführung von t_rcvconnect() stehen in call->addr die gültigen Informationen über die soeben eingerichtete Verbindung.

Wenn jedoch zuvor mit t_open() oder der POSIX-Funktion fcntl() für den durch fd spezifizierten Transportendpunkt O_NDELAY oder O_NONBLOCK gesetzt wurde, wird t_rcvconnect() im asynchronen Modus ausgeführt. Im asynchronen Modus wartet t_rcvconnect() nicht auf eine Verbindungsbestätigung, sondern gibt sofort nach Abfrage des Status der Verbindungsanforderung die Kontrolle wieder an den aufrufenden Benutzer zurück. Falls die angeforderte Verbindung noch nicht eingerichtet ist, liefert t_rcvconnect() den Returnwert -1 zurück und setzt t_errno auf TNODATA. In diesem Fall muss der Benutzer t_rcvconnect() zu einem späteren Zeitpunkt erneut aufrufen, um die Verbindungsaufbau-Phase zu beenden und die zugehörigen Informationen in call->addr zu erhalten.

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 für einen Ergebnisparameter reservierten Bytes reicht nicht aus, um den Wert des Parameters zu speichern. Der Zustand des Transportanbieters wird aus Benutzersicht auf den Zustand T_DATAXFER gesetzt, und die Information für die Verbindungsanforderung, die in *call zurückgeliefert werden soll, wird entfernt.

TLOOK

Auf dem durch fd übergebenen Transportendpunkt ist ein asynchrones Ereignis eingetreten und verlangt sofortige Bearbeitung.

TNODATA

O_NDELAY oder O_NONBLOCK wurde gesetzt, aber es ist noch keine Verbindungsbestätigung angekommen.

TNOTSUPPORT

Diese Funktion wird vom darunter liegenden Transportanbieter nicht unterstützt.

TOUTSTATE

Innerhalb einer Sequenz von XTI-Funktionsaufrufen für den Transportendpunkt fd wurde die Funktion an der falschen Stelle aufgerufen.

TSYSERR

Während der Ausführung dieser Funktion ist ein Systemfehler aufgetreten.

Siehe auch

t_accept(), t_bind(), t_connect(), t_listen(), t_open(), fcntl()