2012-04-05 15 views
1

Wenn der Aufruf der SELECT-Anweisung zurückkehrt, prüfen wir, ob die aktiven Dateideskriptoren die Anforderung des Mehrfachclients verarbeiten.ereignisbasierte Socket-Programmierung in C

select(maxfd+1, &readfds, NULL, NULL, NULL); 

Das, ist wählen Befehl überwacht die Dateideskriptoren in den Readfds gesetzt. Meine Frage ist, während zum Zeitpunkt der Verarbeitung der Client-Anfrage, mehr neue Verbindungen am abhörenden Socket ankommen, wie würde das Programm diese neuen Verbindungen erfassen?

+0

Sie haben Themen zu verwenden. –

+1

Es würde nicht, bis die aktuelle Verbindung fertig ist. Das setzt natürlich voraus, dass Sie nur einen Thread/Prozess verwenden. –

+4

@Abhishek Sagar: Sie haben 10 Fragen gestellt, aber keine einzige Antwort akzeptiert. Bitte markieren Sie die Antworten als akzeptiert, wenn sie Ihr Problem gelöst haben. – orlp

Antwort

3

Sie erfahren darüber, wenn Sie den Server-Socket im Readfd-Set von select() überwachen. Wählen Sie aus, dass ein Server-Socket als lesbar angezeigt wird. Dies bedeutet, dass eine Verbindung wartet, sodass Sie sie akzeptieren() können.

... 
FD_SET(server_sock, &readfds); 

select(maxfd + 1,&readfds,NULL,NULL,NULL); 
if(FD_ISSET(server_sock, &readfds)) { 
    int new_client = accept(server_socket, ...); 
    //add the new client to descriptors to monitor, etc.. 

(Beachten Sie, dass das Betriebssystem des anfänglichen TCP-Handshake tut und stellt eine Verbindung her, accept() macht nur die Verbindung für Ihr Programm verfügbar)