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_listen() - Auf Verbindungsanforderungen warten

&pagelevel(4)&pagelevel

#include <xti.h>

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

Beschreibung

Mit der Funktion t_listen() hört der Benutzer den Transportendpunkt fd passiv nach Verbindungsanforderungen ab, die andere Transportendpunkte mit t_connect() an fd senden. Nach Ausführung von t_listen() zeigt der Parameter call auf ein Objekt vom Typ struct t_call, das Informationen über ankommende Verbindungsanforderungen enthält.

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.buf liefert t_listen() die Protokolladresse des Transportdienstbenutzers zurück, der die Verbindungsanforderung gesendet hat. Vor Aufruf von t_listen() muss der Benutzer in call->addr.maxlen die maximale Länge des Ergebnispuffers call->addr.buf spezifizieren.

Die Rückgabe von protokollspezifischen Parametern in call->opt und die Rückgabe von Benutzerdaten in call->udata werden nicht unterstützt.

Der Wert von call->sequence identifiziert nach Ausführung von t_listen() eindeutig die eingegangene Verbindungsanforderung und ermöglicht es so dem Benutzer, mehrere Verbindungsanforderungen abzuhören, bevor er auf eine dieser Anforderungen antwortet.

Im Standardfall arbeitet t_listen() im synchronen Modus. Im synchronen Modus wartet (blockiert) t_listen(), wenn keine Verbindungsanforderung vorliegt, und gibt erst nach Eintreffen einer Verbindungsanforderung die Kontrolle an den Benutzer zurück.

Wenn jedoch der Benutzer zuvor mit t_open() oder der POSIX-Funktion fcntl() O_NDELAY oder O_NONBLOCK gesetzt hat, arbeitet t_listen() im asynchronen Modus. t_listen() fragt dann nur noch auf anstehende Verbindungsanforderungen ab (poll()), wartet aber nicht. Wenn keine Verbindungsanforderungen vorhanden sind, liefert t_listen() den Wert -1 zurück und setzt t_errno auf TNODATA.

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.

TBADQLEN

Der Wert von qlen des Transportendpunkts, auf den fd verweist, ist 0.

TBUFOVFLW

Die Anzahl der (mit maxlen) für einen Ergebnisparameter reservierten Bytes reicht nicht aus, um den Wert des Parameters abzuspeichern. Der Zustand des Transportanbieters ändert sich aus der Sicht des Benutzers auf T_INCON. Die Information über die Verbindungsanforderung, die in *call zurückgeliefert werden soll, wird gelöscht.

TLOOK

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

TNODATA

O_NDELAY oder O_NONBLOCK ist gesetzt worden, aber es befindet sich keine Verbindungsanforderung in der Warteschlange.

TNOTSUPPORT

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

TPROTO

Die Verbindung zum Transportsystem BCAM wurde beendet.

TSYSERR

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

Siehe auch

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