#include <sys.socket.h>
Kernighan-Ritchie-C:
int listen(s, backlog);
int s;
int backlog;
ANSI-C:
int listen(int s, int backlog);
Beschreibung
Die Funktion listen() wird in den Adressfamilien AF_INET und AF_INET6 nur für Sockets vom Typ SOCK_STREAM sowie in der Adressfamilie AF_ISO unterstützt.
Die Funktion listen() veranlasst, dass der Socket s für die Annahme von Verbindungsanforderungen zugelassen wird und überprüft dann den Socket auf anstehende Verbindungsanforderungen. Zu diesem Zweck richtet listen() für den Socket s eine Warteschlange für eingehende Verbindungsanforderungen ein.
Mit dem Parameter backlog gibt der Benutzer an, wie viele Verbindungsanforderungen die Warteschlange maximal aufnehmen kann. Allerdings wertet SOCKET(BS2000) den Parameter backlog derzeit nicht aus, sondern nimmt Verbindungsanforderungen solange an, bis die maximale Anzahl verfügbarer Sockets belegt ist.
Damit eine Task über einen Socket mit dem Partner kommunizieren kann, der Verbindungsanforderungen schickt, sind folgende Schritte erforderlich:
einen Socket erzeugen, socket(), und binden, bind()
mit listen() für den Socket eine Warteschlange für eingehende Verbindungsanforderungen spezifizieren
Verbindungsanforderungen mit accept() annehmen
In AF_ISO ist darüber hinaus das Senden von Benutzerdaten oder Confirm-Daten - CFRM-Daten, sendmsg() - erforderlich (siehe auch Bild 4 im Abschnitt "Zusammenspiel der Funktionen bei verbindungsorientierter Kommunikation").
Mit connect() können nur Verbindungen zwischen zwei Sockets der Adressfamilie AF_ISO oder zwischen jeweils zwei Sockets der Adressfamilien AF_INET oder AF_INET6 oder zwischen jeweils einem Socket der Adressfamilien AF_INET oder AF_INET6 initiiert werden.
Richten Sie daher bei Nutzung aller Adressfamilien sowohl ein listen()-Socket der Adressfamilie AF_ISO, als auch ein listen()-Socket der Adressfamilien AF_INET oder AF_INET6 ein. Auf diese Weise ist der Verbindungsaufbau zu jeder unterstützten Adressfamilie gewährleistet.
Returnwert
0:
bei Erfolg
-1:
bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.
Fehleranzeige durch errno
EBADF
Der Parameter s ist kein gültiger Deskriptor.
EISCONN
Der Socket hat bereits eine Verbindung.
EOPNOTSUPP
Der Socket-Typ ist nicht SOCK_STREAM und wird von listen() nicht unterstützt.
Siehe auch
accept(), connect(), socket()