Accettazione di una connessione (Windows Sockets 2)

Una volta che il socket è in ascolto di una connessione, il programma deve gestire le richieste di connessione su tale socket.

Per accettare una connessione in un socket

  1. Creare un oggetto SOCKET temporaneo denominato ClientSocket per accettare connessioni dai client.

    
    SOCKET ClientSocket;
    
    
    
  2. In genere, un'applicazione server sarebbe progettata per ascoltare le connessioni da più client. Per i server ad alte prestazioni, più thread vengono comunemente usati per gestire più connessioni client.

    Esistono diverse tecniche di programmazione che usano Winsock che possono essere usate per ascoltare più connessioni client. Una tecnica di programmazione consiste nel creare un ciclo continuo che controlla le richieste di connessione usando la funzione listen (vedere Ascolto su un socket). Se si verifica una richiesta di connessione, l'applicazione chiama la funzione accept, AcceptEx o WSAAccept e passa il lavoro a un altro thread per gestire la richiesta. Sono possibili diverse altre tecniche di programmazione.

    Si noti che questo esempio di base è molto semplice e non usa più thread. L'esempio ascolta e accetta solo una singola connessione.

    
    ClientSocket = INVALID_SOCKET;
    
    // Accept a client socket
    ClientSocket = accept(ListenSocket, NULL, NULL);
    if (ClientSocket == INVALID_SOCKET) {
        printf("accept failed: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
    
    
    
  3. Quando la connessione client è stata accettata, un'applicazione server passa normalmente il socket client accettato (la variabile ClientSocket nel codice di esempio precedente) a un thread di lavoro o a una porta di completamento di I/O e continua a accettare connessioni aggiuntive. In questo esempio di base il server continua al passaggio successivo.

    Esistono diverse altre tecniche di programmazione che possono essere usate per ascoltare e accettare più connessioni. Queste includono l'uso delle funzioni select o WSAPoll . Alcuni esempi di queste varie tecniche di programmazione sono illustrati negli esempi di Winsock avanzati inclusi in Microsoft Windows Software Development Kit (SDK).

    Nota

    Nei sistemi Unix, una tecnica di programmazione comune per i server era per un'applicazione in ascolto delle connessioni. Quando è stata accettata una connessione, il processo padre chiamerebbe la funzione fork per creare un nuovo processo figlio per gestire la connessione client, ereditando il socket dall'elemento padre. Questa tecnica di programmazione non è supportata in Windows, poiché la funzione fork non è supportata. Questa tecnica non è in genere adatta ai server ad alte prestazioni, poiché le risorse necessarie per creare un nuovo processo sono molto maggiori di quelle necessarie per un thread.

     

Passaggio successivo: ricezione e invio di dati nel server

Introduzione con Winsock

Applicazione Winsock Server

Ascolto su un socket