ID do artigo: 227672 - Última revisão: segunda-feira, 3 de novembro de 2003 - Revisão: 3.1

Winsock não limitar o tamanho do buffer

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sintomas

Enviar um estilo Berkeley (s, p, N,...) sempre retorna imediatamente para N grande (mais 1 MB), mesmo quando o tamanho do buffer definido pelo SO_SNDBUF é muito menor do que N. Esse problema também ocorre quando SO_SNDBUF não está definido (diferente de zero padrão adotada). Se SO_SNDBUF estiver definido como 0 (zero), em seguida, os blocos de chamada corretamente. A chamada deve sempre bloquear sempre que o espaço de buffer disponível é menor do que N.

Causa

Esse recurso melhora o desempenho da maioria dos aplicativos existentes que não somente um envio síncrono por vez. Alguns aplicativos não podem se beneficiar por esse recurso e uma possível solução está disponível abaixo.

Resolução

A seguinte solução wrapper preserva os objetivos de desempenho do sistema e blocos por uma duração razoável. A solução alternativa mantém uma contagem de bytes já armazenado em buffer e subtrai-los da configuração atual do SO_SNDBUF.
sendBlock( SOCKET s, PTR p, int cb, int f )
{
    int nSockBuf = GetSockOpt( s, SO_SNDBUF );
    if( cb <= nSockBuf )
        return send( s, p, cb, f );

    cb -= nSockBuf;                    //Subtraction takes place here.

    int nRet = send( s, p, cb, f );
    if( nRet != cb )
        return nRet;

    return cb + send( s, p+cb, nSockBuf, f );
}
				

Situação

A Microsoft confirmou que este é um problema no Microsoft Windows 2000.

Mais Informações

Esses sintomas também podem estar presentes se muito grandes buffers são fornecidos nesse tipo de chamada sem usar a solução acima.

A informação contida neste artigo aplica-se a:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Professional Edition
Palavras-chave: 
kbmt kbprb KB227672 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 227672  (http://support.microsoft.com/kb/227672/en-us/ )