Share via


Aceitando uma conexão (Windows Sockets 2)

Depois que o soquete estiver escutando uma conexão, o programa deverá lidar com solicitações de conexão nesse soquete.

Para aceitar uma conexão em um soquete

  1. Crie um objeto SOCKET temporário chamado ClientSocket para aceitar conexões de clientes.

    
    SOCKET ClientSocket;
    
    
    
  2. Normalmente, um aplicativo de servidor seria projetado para escutar conexões de vários clientes. Para servidores de alto desempenho, vários threads são comumente usados para lidar com várias conexões de cliente.

    Há várias técnicas de programação diferentes usando Winsock que podem ser usadas para escutar várias conexões de cliente. Uma técnica de programação é criar um loop contínuo que verifica solicitações de conexão usando a função de escuta (consulte Escutando em um soquete). Se ocorrer uma solicitação de conexão, o aplicativo chamará a função accept, AcceptEx ou WSAAccept e passará o trabalho para outro thread para lidar com a solicitação. Várias outras técnicas de programação são possíveis.

    Observe que este exemplo básico é muito simples e não usa vários threads. O exemplo também apenas escuta e aceita apenas uma única conexão.

    
    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 a conexão do cliente for aceita, um aplicativo de servidor normalmente passaria o soquete de cliente aceito (a variável ClientSocket no código de exemplo acima) para um thread de trabalho ou uma porta de conclusão de E/S e continuaria aceitando conexões adicionais. Neste exemplo básico, o servidor continua para a próxima etapa.

    Há várias outras técnicas de programação que podem ser usadas para escutar e aceitar várias conexões. Isso inclui o uso das funções select ou WSAPoll . Exemplos de algumas dessas várias técnicas de programação são ilustrados nos Exemplos Avançados do Winsock incluídos no Microsoft Windows Software Development Kit (SDK).

    Observação

    Em sistemas Unix, uma técnica de programação comum para servidores era que um aplicativo escutasse conexões. Quando uma conexão era aceita, o processo pai chamava a função de bifurcação para criar um novo processo filho para lidar com a conexão do cliente, herdando o soquete do pai. Não há suporte para essa técnica de programação no Windows, pois não há suporte para a função fork . Essa técnica também geralmente não é adequada para servidores de alto desempenho, pois os recursos necessários para criar um novo processo são muito maiores do que os necessários para um thread.

     

Próxima etapa: receber e enviar dados no servidor

Introdução com Winsock

Aplicativo servidor Winsock

Escutando em um soquete