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