CAsyncSocket::SetSockOpt

BOOL SetSockOpt ( int nOptionName, const void * lpOptionValue, int nOptionLen, int nLevel = SOL_SOCKET );

Valor de retorno

Diferente de zero se a função for bem-sucedida; caso contrário 0 e um código de erro específicos podem ser recuperadas chamando GetLastError. Os seguintes erros aplicam para esta função de membro:

Parâmetros

nOptionName

A opção de soquete para o qual o valor deve ser definido.

lpOptionValue

Um ponteiro para o buffer no qual o valor para a opção solicitada é fornecido.

nOptionLen

O tamanho do buffer lpOptionValue em bytes.

nLevel

O nível no qual a opção é definida; os níveis com suporte somente são SOL_SOCKET e IPPROTO_TCP.

Observações

Chame essa função de membro para definir uma opção de soquete. SetSockOpt define o atual valor para uma opção Soquete associado com um soquete de qualquer tipo, em qualquer Estado. Embora opções podem existir no Múltiplo protocolo níveis, essa especificação define apenas opções que existem a nível de primeira "soquete". Opções afetam operações Soquete, como se dados acelerados são recebidos no fluxo de dados normal, se transmitir mensagens podem ser enviadas na Soquete e assim por diante.

Existem dois tipos de opções Soquete: Boolean opções que habilitar ou desativar um recurso ou comportamento e as opções que requerem um valor inteiro ou estrutura. Para habilitar uma Boolean opção, lpOptionValue aponta para um inteiro diferente de zero. Para desativar a opção lpOptionValue aponta para um número inteiro igual a zero. nOptionLen deve ser igual a sizeof(BOOL) para Boolean opções. Para outras opções, lpOptionValue aponta para o número inteiro ou estrutura que contém o valor desejado para a opção e nOptionLen é o comprimento do inteiro ou estrutura.

SO_LINGER controla a ação tomada quando dados não enviados são enfileirados em um soquete e é chamada a função Fechar para fechar a Soquete. Para obter mais informações, consulte Windows Sockets Programming considerações na documentação do Win32 SDK.

Por padrão, um soquete não pode ser ligado (consulte Bind) para um local endereço que já está em uso. Na ocasião, no entanto, pode ser desejável "reutilizar" um endereço dessa forma. Desde que cada conexão é exclusivamente identificado por uma combinação de locais e remotos endereços, não há nenhum problema com ter dois soquetes vinculados para o mesmo endereço local enquanto os endereços remotos são diferentes.

Informar a implementação do Windows Sockets que uma chamada Bind em um soquete não deveria ser proibida porque o endereço desejado já está em uso por outro soquete, o aplicativo deve definir a opção de soquete SO_REUSEADDR para o soquete antes de emitir a chamada Bind . Observe que a opção é interpretada apenas no momento da chamada Bind : não é necessário (mas inofensiva) definir a opção em um soquete que não deve ser ligado a um endereço existente e definir ou redefinir a opção depois do ligar a chamada tem nenhum efeito sobre este ou qualquer outro soquete.

Um aplicativo pode solicitar que a implementação de soquetes do Windows permitem o uso de pacotes "keep-alive" nas conexões de protocolo de controle de transmissão (TCP) ativando a opção de soquete SO_KEEPALIVE . (Para obter informações sobre os pacotes "keep-alive", consulte Windows Sockets Programming considerações na documentação do Win32 SDK.) Uma implementação de Windows Sockets não precisa de suporte ao uso de keep-alive de: em caso afirmativo, a semântica precisa são específicos de implementação, mas deve estar em conformidade com RFC 1122 seção 4.2.3.6: "exigências para Hosts da Internet — camadas de comunicação." Se uma conexão é interrompida como resultado de "keep-alives" o código de erro WSAENETRESET é retornado para todas as chamadas em andamento na Soquete e quaisquer chamadas subseqüentes falhará com WSAENOTCONN.

A opção TCP_NODELAY desativa o algoritmo Nagle. O algoritmo Nagle é usado para reduzir o número de pacotes pequenos enviados por um host por buferização dados não confirmados envio até que um pacote de tamanho normal pode ser enviado. No entanto, para algumas aplicações deste algoritmo pode impedir o desempenho e TCP_NODELAY pode ser usado para desativá-lo. Criadores de aplicativo não devem definido TCP_NODELAY a menos que o impacto de fazer assim é bem compreendida e desejado, porque configuração TCP_NODELAY pode ter um impacto negativo no desempenho da rede. TCP_NODELAY é o único suporte para a opção de soquete que usa nível IPPROTO_TCP; todas as outras opções usam nível SOL_SOCKET.

Algumas implementações do Windows Sockets fornecem saída Depurar informações se a opção SO_DEBUG é definida por um aplicativo.

As seguintes opções são com suporte para SetSockOpt. O tipo identifica o tipo de dados endereçados pelo lpOptionValue.

Valor Tipo Significado
SO_BROADCAST BOOL Permitir a transmissão de mensagens de difusão no soquete.
SO_DEBUG BOOL Registro de informações de depuração.
SO_DONTLINGER BOOL Não bloquear estreita aguardando dados não enviados para serem enviados. Esta opção é equivalente a configuração SO_LINGER com l_onoff definido como zero.
SO_DONTROUTE BOOL Não encaminhar: envio diretamente a interface.
SO_KEEPALIVE BOOL Enviar ligações keep-alive.
SO_LINGER estrutura LINGER Demoramos em Fechar se houver dados não enviados.
SO_OOBINLINE BOOL Receber dados fora de banda no fluxo de dados normal.
SO_RCVBUF int Especificar o tamanho do buffer para recebe.
SO_REUSEADDR BOOL Permitir que o soquete ser ligado a um endereço que já está em uso. (Consulte vincular).
SO_SNDBUF int Especificar o tamanho do buffer para envia.
TCP_NODELAY BOOL Desativa o algoritmo Nagle para coalescing de envio.

Berkeley Software Distribution (BSD) opções não com suporte para SetSockOpt são:

Valor Tipo Significado
SO_ACCEPTCONN BOOL Soquete está escutando
SO_ERROR int Obter status de erro e limpar.
SO_RCVLOWAT int Recebe marca low water.
SO_RCVTIMEO int Receber tempo limite
SO_SNDLOWAT int Envie marca low water.
SO_SNDTIMEO int Envie tempo limite.
SO_TYPE int Tipo de soquete.
IP_OPTIONS Campo definir opções no cabeçalho IP.

Visão geral de CAsyncSocket |nbsp; Membros de classe | Gráfico de hierarquia

Co&nsulte tambémnbsp;CAsyncSocket::AsyncSelect, CAsyncSocket::Bind, CAsyncSocket::Create, CAsyncSocket::GetSockOpt, CAsyncSocket::IOCtl

Index