Artigo: 227672 - Última revisão: segunda-feira, 3 de Novembro de 2003 - Revisão: 3.1

Winsock não limitar o tamanho da memória intermédia

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 | Reduzir tudo

Sintomas

Enviar um estilo Berkeley (s, p, N,...) devolve sempre imediatamente para N grande (mais 1 MB), mesmo quando o tamanho da memória intermédia definido por SO_SNDBUF é inferior a n. Este problema também acontece quando SO_SNDBUF não está definido (predefinição zero assumida). Se SO_SNDBUF estiver definido como 0 (zero), em seguida, os blocos de chamada correctamente. A chamada sempre deve bloquear sempre que espaço disponível na memória intermédia é inferior a n.

Causa

Esta funcionalidade melhora o desempenho da maior parte das aplicações existentes que apenas um envio síncrono cada vez. Algumas aplicações não podem beneficiar desta funcionalidade e uma solução possível é disponível abaixo.

Resolução

A seguinte solução de mensagens publicitárias preserva os objectivos de desempenho do sistema e blocos para uma duração razoável. A medida para contornar o problema mantém uma contagem de bytes já na memória intermédia e subtracção-à definição de SO_SNDBUF actual.
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 );
}
				

Ponto Da Situação

Microsoft confirmou que este problema existe no Microsoft Windows 2000.

Mais Informação

Estes sintomas poderão também existir se memórias intermédias grandes são fornecidas neste tipo de chamada sem utilizar 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )