Compartilhar via


CAsyncSocket::SetSockOpt

Chamar essa função de membro para definir uma opção de soquete.

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

Parâmetros

  • nOptionName
    A opção de soquete para que o valor deve ser definido.

  • lpOptionValue
    Um ponteiro para o buffer em que o valor para a opção solicitada é fornecido.

  • nOptionLen
    O tamanho do buffer de lpOptionValue em bytes.

  • nLevel
    o nível em que a opção é definida; os únicos níveis são suportados SOL_SOCKET e IPPROTO_TCP.

Valor de retorno

Diferente de zero se a função é com êxito; se não 0, e um código de erro específico podem ser recuperados chamando GetLastError. Os seguintes erros se aplicam a essa função de membro:

  • WSANOTINITIALISED A AfxSocketInit com êxito deve ocorrer antes de usar este API.

  • WSAENETDOWN a implementação da do windows detectou que o subsistema de rede falhou.

  • WSAEFAULT   lpOptionValue não é válido em uma parte do espaço de endereço do processo.

  • A operação de soquetes do windows de bloqueio deWSAEINPROGRESS A está em andamento.

  • WSAEINVAL   nLevel é inválido, ou informações em lpOptionValue é inválido.

  • A conexão deWSAENETRESET expirou SO_KEEPALIVE quando é definido.

  • WSAENOPROTOOPT a opção for desconhecido ou sem suporte. Em particular, SO_BROADCAST não é suportado nos soquetes de tipo SOCK_STREAM, quando SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER, e SO_OOBINLINE não são suportados na SOCK_DGRAMdo tipo.

  • A conexão deWSAENOTCONN redefinido SO_KEEPALIVE quando é definido.

  • WSAENOTSOCK o descritor não for um soquete.

Comentários

SetSockOpt define o valor atual de uma opção de soquete associada com um soquete de qualquer tipo, em qualquer estado. Embora as opções podem existir em vários níveis de protocolo, essa especificação define apenas as opções que existem no nível mais alto de soquete “”. Operações de soquete de afetar opções, como se os dados expedidos são recebidos no fluxo de dados normal, se as mensagens espalhado podem ser enviadas no soquete, e assim por diante.

Há dois tipos de opções de soquete: Opções de que permitem ou desativam um recurso ou um comportamento, e opções que exigem um valor inteiro ou estrutura. Para ativar uma opção booleano, pontos de lpOptionValue a um inteiro diferente de zero. Para desativar os pontos de lpOptionValue de opção a um inteiro igual a zero. nOptionLen deve ser igual a sizeof(BOOL) opções para booleanos. Para outras opções, pontos de lpOptionValue para 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 os dados unsent são colocadas na fila em um soquete e a função de Fechar é chamada para fechar o soquete.

Por padrão, um soquete não pode ser associado (consulte) Ligarpara um endereço local que já em uso. Ocasionalmente, entretanto, pode ser desejável “reutilizar essa maneira um endereço.” Desde que cada conexão é unicamente identificada pela combinação de endereços locais e remotos, não há problemas com ter dois soquetes associados ao mesmo endereço local como endereços remotos são diferentes.

Para informar aos soquetes do windows a implementação que Ligar chama um soquete não deve ser recusada porque o endereço desejado já está em uso por outro soquete, o aplicativo deve definir a opção de soquete de SO_REUSEADDR para o soquete emitir antes da chamada de Ligar . Observe que o padrão é interpretada somente no momento da chamada de Ligar: portanto é desnecessário (mas inofensivo) definir a opção em um soquete que não deve ser associado a um endereço existente, e em definir ou em redefinir a opção após a chamada de Ligar não tem efeito em este ou qualquer outro soquete.

Um aplicativo pode solicitar a implementação da do windows permite o uso de pacotes manter- “vivo” em conexões de (TCP) de Transmission ativando o controle protocolo padrão de soquete de SO_KEEPALIVE . Uma implementação dos soquetes do windows não precisa oferecer suporte ao uso de mantém - alives: se fizer isso, a semântica precisa é a implementação específica mas deve estar em conformidade com a seção 4.2.3.6 do RFC 1122: “Requisitos de host da Internet — camadas de comunicação”. Se uma conexão é descartada como resultado de “-” alives manter o código de erro WSAENETRESET é retornado para todas as chamadas em andamento de soquete, e quaisquer chamadas subseqüentes irão falhar com WSAENOTCONN.

A opção de TCP_NODELAY desativa o algoritmo de Nagle. O algoritmo de Nagle é usado para reduzir o número de pacotes pequenos enviados por um host armazenar em buffer dados desconhecidos de enviar até que um pacote sem tamanho máximo pode ser enviado. Em o entanto, como alguns aplicativos esse algoritmo podem impedir o desempenho, e TCP_NODELAY pode ser usado para desligá-lo. Criadores do aplicativo não deve definir TCP_NODELAY a menos que o impacto de fazer isso é válido composto e desejado, desde que definir TCP_NODELAY pode ter um impacto significativo desempenho negativo de rede. TCP_NODELAY é a única opção suporte de soquete que usa; IPPROTO_TCPnivelado qualquer nível SOL_SOCKETrestante do uso de padrões.

Algumas implementações de informações de depuração de saída da fonte da do windows se a opção de SO_DEBUG é definida por um aplicativo.

As seguintes opções são suportadas para SetSockOpt. o tipo identifica o tipo de dados endereçados por lpOptionValue.

Valor

Tipo

Significado

SO_BROADCAST

BOOL

Permite a transmissão de mensagens espalhado em soquete.

SO_DEBUG

BOOL

Registrar informações de depuração.

SO_DONTLINGER

BOOL

Não bloquear Fechar espera que os dados unsent a ser enviados. Definir essa opção é equivalente a definir SO_LINGER com l_onoff definido como zero.

SO_DONTROUTE

BOOL

Não roteamento: enviar diretamente a interface.

SO_KEEPALIVE

BOOL

o envio mante-se-alives.

SO_LINGER

a estrutura ATRASA-SE

Atrase-se em Fechar se os dados unsent estão presentes.

SO_OOBINLINE

BOOL

Receber dados fora de banda no fluxo de dados normal.

SO_RCVBUF

int

Especificar o tamanho do buffer para receber.

SO_REUSEADDR

BOOL

Permite que o soquete está associado a um endereço que já em uso. (Consulte) Ligar.

SO_SNDBUF

int

Especifica o tamanho do buffer para envia.

TCP_NODELAY

BOOL

Desativam o algoritmo de Nagle para enviar o que coalesce.

As opções de (BSD) de Berkeley Software Distribution não são suportadas para SetSockOpt :

Valor

Tipo

Significado

SO_ACCEPTCONN

BOOL

O soquete que estejam aguardando

SO_ERROR

int

Obter o status de erro e apagá-lo.

SO_RCVLOWAT

int

Receba a marca de maré baixa.

SO_RCVTIMEO

int

Recebe o tempo limite

SO_SNDLOWAT

int

Enviar a marca de maré baixa.

SO_SNDTIMEO

int

Enviar o tempo limite.

SO_TYPE

int

Tipo de soquete.

IP_OPTIONS

 

Definir o campo de opções no cabeçalho de IP.

Requisitos

Cabeçalho: afxsock.h

Consulte também

Referência

Classe CAsyncSocket

Gráfico da hierarquia

CAsyncSocket::AsyncSelect

CAsyncSocket::Bind

CAsyncSocket::Create

CAsyncSocket::GetSockOpt

CAsyncSocket::IOCtl