int accept( int socket, struct sockaddr *address, socklen_t *address_len);

Wie in der Funktion listen() beschrieben, wird eine Warteschlange aufgebaut, in der Verbindungswünsche und bestehende Verbindungen gespeichert werden. Sofern eine Verbindung existiert, wird durch den Aufruf der accept()-Funktion die erste aufgebaute Verbindung aus der Warteschlange entfernt und ein neuer Socket kreiert. Existiert keine Verbindung in der Warteschlange, dann wird bei einem blockierenden Socket gewartet bis eine Verbindung vorhanden ist. Bei einem nicht-blockierenden Socket wird ein Fehler angezeigt, wenn keine Verbindung existiert.

Die Aussage, dass durch den Aufruf der accept()-Funktion Verbindungswünsche quittiert oder abgelehnt werden, ist falsch: Die accept()-Funktion informiert den Aufrufer, dass eine neue Verbindung vorhanden ist. Ob die Verbindung sofort wieder abgebaut oder weiterhin bestehen soll, liegt in der Verantwortung des Aufrufers der accept()-Funktion und nicht im Ermessen der Socket-Schnittstelle.

Der Parameter socket ist der Socket, der durch die Funktion socket() erzeugt wurde und bei der die bind()- und listen()-Funktion aufgerufen wurde. Im Parameter address ist die Adresse des Client (in unserem Fall die IP-Adresse und die Port-Nummer) enthalten, der eine Verbindung mit dem Server aufbauen möchte. Der Parameter address_len enthält die Größe der Struktur des Parameters address oder NULL. Wurde die Funktion erfolgreich ausgeführt, dann übergibt sie den neuen Socket-Deskriptor an den Aufrufer. Trat ein Fehler auf, dann wird der Wert -1 zurückgegeben.

Beispiel:

int sock_1,sock_2;

sock_2 = accept(sock_1,NULL,NULL);

if(sock_2 < 0)
{
	perror(“accept stream socket”);
	exit(1);
}

/* Anmerkung: in diesem Beispiel sind die beiden Parameter 
(Parameter: address und address_len) NULL, 
da sie nicht benötigt werden */