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