|
Beschreibung
Mit der Funktion t_accept() nimmt der Transportbenutzer über einen Transportendpunkt eine Verbindung an, die von einem anderen Transportbenutzer mit der Funktion t_connect() angefordert wurde.
Der Parameter fd bezeichnet den lokalen Transportendpunkt, auf dem eine Verbindungsanforderung eingetroffen ist. Der Parameter resfd spezifiziert den lokalen Transportendpunkt, über den die Verbindung hergestellt werden soll.
Beim Transportendpunkt resfd, auf dem die Verbindung angenommen werden soll, sind zwei Fälle zu unterscheiden:
resfd == fd
In diesem Fall dürfen auf fd keine weiteren Verbindungsanforderungen anstehen, d.h. der Transportbenutzer muss alle zuvor auf fd eingegangenen Verbindungsanforderungen mit t_accept() oder t_snddis() bearbeitet haben. Andernfalls beendet sich t_accept() mit Fehler und setzt t_errno auf TINDOUT.resfd != fd
In diesem Fall muss sich resfd beim Aufruf von t_accept() im Zustand T_UNBND oder T_IDLE befinden (siehe Abschnitt "t_getstate() - Aktuellen Zustand abfragen").
Mit dem Parameter call übergibt der Benutzer Informationen, die der Transportanbieter für die Einrichtung der Verbindung benötigt. call ist ein Zeiger auf ein Objekt vom Typ struct t_call.
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; };
call->addr enthält die Protokolladresse des Transportbenutzers, der die Verbindungsanforderung gesendet hat.
call->opt zeigt alle die Verbindung betreffenden Optionen an. Werte und Syntax dieser Optionen sind protokollspezifisch.
call->udata (Senden von Benutzerdaten) wird nicht unterstützt.
call->sequence enthält den zuvor von t_listen() zurückgelieferten Wert, der die auf dem Transportendpunkt fd anstehende Verbindungsanforderung eindeutig identifiziert.
Wenn für den durch fd übergebenen Transportendpunkt noch weitere Ereignisse anstehen (Verbindungsanforderung oder Verbindungsabbruch-Wunsch), beendet sich t_accept() mit Fehler und setzt t_errno auf TLOOK.
Returnwert
0:
Bei Erfolg.
-1:
Bei Fehler. t_ errno wird gesetzt, um den Fehler anzuzeigen.
Fehler
TBADF
Der angegebene Deskriptor verweist nicht auf einen Transportendpunkt.
TOUTSTATE
Innerhalb einer Sequenz von XTI-Funktionsaufrufen für den Transportendpunkt fd wurde t_accept() an der falschen Stelle aufgerufen, oder der durch resfd übergebene Transportendpunkt befindet sich nicht im Zustand T_IDLE oder T_UNBND.
TACCES
Der Benutzer hat keine Erlaubnis, eine Verbindung auf dem antwortenden Transportendpunkt anzunehmen oder die angegebenen Optionen zu verwenden.
TBADDATA
Das Senden von Benutzerdaten wird nicht unterstützt.
TBADOPT
Die spezifizierten Optionen hatten ein falsches Format oder enthielten ungültige Informationen.
TBADSEQ
Es wurde eine ungültige Sequenznummer angegeben.
TINDOUT
Die Funktion wurde mit fd == resfd aufgerufen, und für den durch fd übergebenen Transportendpunkt stehen noch weitere Verbindungsanforderungen an. Diese zuvor eingegangenen Verbindungsanforderungen müssen zuerst mit t_accept() oder t_snddis() bearbeitet werden.
TLOOK
Auf dem durch fd übergebenen Transportendpunkt ist ein asynchrones Ereignis eingetreten und erfordert sofortige Bearbeitung.
TNOTSUPPORT
Die Funktion wird vom darunter liegenden Transportdienst nicht unterstützt.
TRESQLEN
Dem durch resfd übergebenen Transportendpunkt (mit resfd != fd) ist eine Protokolladresse zugeordnet, für die qlen > 0 gilt.
TSYSERR
Während der Ausführung dieser Funktion ist ein Systemfehler aufgetreten.
Siehe auch
t_connect(), t_getstate(), t_listen(), t_open(), t_rcvconnect()