Socket Aceite 2 C função

Socket Aceite 2 C função
Sempre que um nó recebe um pacote de solicitação, isso pode aceitá -lo e estabelecer a conexão. O método aceit () foi empregado para realizar isso. As solicitações de conexão de muitos usuários às vezes são tratadas por um soquete que foi configurado como um servidor. O soquete inicial do servidor de alguma forma não aceita a conexão. Em vez disso, introduz um soquete único que se junta à conexão. A função aceit () fornece o identificador do soquete. O conector principal do servidor ainda está aberto e pronto para aceitar novas conexões recebidas.

Talvez no terminal do servidor, o número de solicitações de entrada atuais seja limitado. Se as chamadas recebidas do cliente chegarem mais rápidas, o servidor poderá processar dados, a fila poderá ficar sobrecarregada e futuras solicitações de entrada serão negadas por uma exceção econ. O tamanho desta fila é fornecido como um parâmetro para o método de escuta. No entanto, a configuração invocará sua limitação embutida no tamanho do pacote.

Com protocolos de terminal de pacotes (SOCK_STREAM, SOCK_SEQPACKET), utilize o método aceit (). Ele aceita o primeiro pacote de solicitação para a porta de recebimento, Sockfd, da fila de solicitações recebidas, estabelece uma nova porta associada e fornece um novo arquivo específico para o conector. A conexão recém -formada não está configurada para ouvir. Esta função não afeta o terminal primário Sockfd.

Sintaxe da função aceita o soquete no idioma C

# int aceita (int sockfd, struct sockaddr *addr, socklen_t *addrlen)

A função aceit () contém parâmetros diferentes, que incluem Sockfd, *addr e *addrlen. A seguir, são apresentados os detalhes desses argumentos:

O parâmetro "Sockfd" é uma porta que foi desenvolvida utilizando um soquete, conectado a um endereço físico por bind. Mas também está esperando as entradas depois de ouvir.

O parâmetro "addr" é um ponteiro de configuração "Sockaddr". A localização da porta de pares é determinada pela camada de rede e é fornecida neste elemento. A classe IP do soquete indica a sintaxe ideal do IP fornecido pelo "addr". Nada seria carregado quando o parâmetro "addr" se tornar nulo; "Addrlen" nunca foi utilizado nesta situação e terá que ser nulo também.

O parâmetro "addrlen" é um parâmetro de avaliação: o receptor pode configurá -lo com a dimensão da estrutura referida pelo parâmetro "addr", e forneceria o tamanho original da porta de referência. Se o cache especificado for muito limitado, o valor recuperado será aparado. Nesta situação, o parâmetro "addrlen" produzirá uma saída consideravelmente maior que o valor fornecido à função.

A função aceit () mantém o cliente, a menos que uma conexão seja encontrada quando não há solicitações existentes na fila e a porta não pode ser definida como não bloqueando. A função aceit () aparece com a exceção eaagin ou ewouldblock quando a configuração é configurada sem bloqueio e não há solicitações de espera na fila.

Exemplo da função do soquete aceit () na linguagem C no Ubuntu 20.04

Vamos escrever o programa que demonstra que a função aceit () está atrasando a chamada.

Primeiro, importamos alguns arquivos de cabeçalho necessários. A biblioteca inclui o uso de metodologias de entrada e saída padrão. indica diferentes categorias de símbolos e estruturas, lida com as funcionalidades do soquete. Em seguida, especifique a variável simbolizada que será aplicada como o nó de destino nas estruturas dadas à função e lida com as diferentes funcionalidades da string. Em seguida, definimos o backlog 3. Ele contém todos os fatores vitais necessários para produzir o design integrado.

Aqui, chamamos a função principal (). Dentro do corpo da função principal (), inicializamos algumas variáveis ​​usadas neste programa. Declaramos o ponteiro estrutural da variável “Sockaddr_in my_addr”. Para criar um soquete, utilizaremos o método Socket (). Além disso, temos vinculado a ajuda da função bind (). E atribuir o valor da função bind () à variável "B". O método bind () contém argumentos diferentes. Usamos uma condição de if-else aninhada nesta instância. Primeiro, definimos a condição da declaração "se". Se o valor da variável "b" for maior que 0, a função printf () imprime o texto "bisking com sucesso".

Caso contrário, a função printf () interrompe a execução do programa exibindo a mensagem "Erro de ligação". Para fins de escuta, a função Listen () é chamada. Inicializaremos uma variável "L" para armazenar o valor da função Listen (). A função Listen () contém dois parâmetros. Agora, aplicamos a condição sobre o valor da escuta se o valor de "L" for maior que 0, o método printf () está sendo chamado para mostrar a mensagem "ouvindo". A função printf () mostra "não ouvindo" se a condição específica não for atendida.

Da mesma forma, para aceitar solicitações de sistema, utilizamos a função aceit (). Mais uma vez para esta função, usaremos a condição se-else. O valor da função aceit () é armazenado na variável "ACC". Se o valor da variável "ACC" for maior que 0, chamamos o método printf () para imprimir a linha "aceita". Caso contrário, chamamos a instrução printf () para imprimir “não aceito”. Então, dessa maneira, vamos encerrar o código.

Recebemos esse tipo de saída depois de executar o código anterior.

Conclusão

Anexamos o soquete Aceite 2 C função em grande detalhe neste artigo. A função aceit () é chamada para aceitar as solicitações do sistema. Temos que importar diferentes bibliotecas antes de usar a função aceit (). Esta função detém parâmetros responsáveis ​​por várias funcionalidades. As chamadas do sistema fornecem um identificador de arquivo específico para a porta recebida se forem executadas com sucesso. Mas, em caso de erro, o código mostra a exceção imprimindo -1. Quando uma conexão de rede é solicitada, um sinal acessível é enviado e os usuários usarão aceitar () para receber uma porta para esse tipo de conexão.