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_accept() - Verbindung annehmen

&pagelevel(4)&pagelevel

#include <xti.h>

int t_accept(int fd, int resfd, struct t_call *call);

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()