Wie sieht's aus?
#include <sys/types.h>
#include <sys/socket.h>
int listen(int s, int backlog);
Was tut's?
Mit listen() versetzt man einen Socket in den Listening-Mode, das heißt er wartet auf eingehende Verbindungen. Dies ist besonders sinnvoll nach einem Aufruf von bind(), aber auch ohne diesen möglich (dann wird ein kurzlebiger Port zugewiesen, im Allgemeinen also wenig sinnvoll).
Was machen die Parameter?
Der erste Parameter gibt wie immer den Socket an, auf den operiert wird.
Der zweite Parameter, backlog, gibt die Anzahl von Verbindungen an, die in der Warteschlange stehen dürfen. Im TCP-Sequenzdiagramm heißt dies, daß das SYN-Paket rausgegangen ist, aber die Verbindung noch nicht angenommen wurde (was mit accept() geschieht). Der Maximalwert ist plattformabhängig, und sollte als Konstante SOMAXCONN verfügbar sein. Der Standard sagt, daß ein Wert von 0 der Implementierung erlaubt einen Minimalwert zu setzen, doch scheint das nicht sinnvoll. Ich habe in der Vergangenheit immer 3 genommen, und werde das auch weiterhin beibehalten, denn eine volle Warteschlange ist ein Zeichen dafür, daß irgendwas nicht stimmt (zum Beispiel ein SYN-Flodder im Einsatz ist), und durch eine längere Warteschlange nicht besser wird.
Wie verwende ich es?
if (listen(s, 3) == -1)
{
perror("listen () failed");
return 3;
}