Erro 104: Connection reset by peer

.NET

Erro 104: Connection reset by peer

Luiz Duarte
Escrito por Luiz Duarte em 27/11/2011
Junte-se a mais de 34 mil devs

Entre para minha lista e receba conteúdos exclusivos e com prioridade

Já me deparei com esse erro algumas vezes durante meus anos de experiência com web e quase sempre ele traz consigo uma confusão tremenda pois à nível de protocolo HTTP, ele pode siginificar uma infinidade de coisas. Entretanto, quando estamos falando de sites dinâmicos que rodam no lado do servidor, como ASP.NET, as causas são mais simples (e infelizmente mais comuns do que se imagina) de serem mitigadas e não devem causar espanto em programadores de qualquer nível, bastando um pouco de atenção aos detalhes.

O que é?

O browser cliente estava conectado com o servidor e por algum motivo esta conexão foi interrompida subitamente, seja por decisão de um lados ou uma falha no meio de comunicação.

O que tem a ver com meu código?

Quando você desenvolve código que derruba a pilha de memória do processo que está executando sua aplicação, esse erro ocorre pois o servidor não esperava por isso e o processo é encerrado.

Livro Carreira

Como resolvo?

Basta reescrever o código que está causando o estouro da pilha. Simples assim. Ok, como eu não sou tão sádico, aqui vão algumas dicas para ajudar a tornar esta tarefa mais fácil:

Em primeiro lugar, qual foi a última alteração que você realizou no código antes desse problema começar a acontecer? Qualquer coisa, por mais inofensiva que pareça pode ocasionar isso, principalmente aqueles códigos que você escreveu e colocou direto no ar, sem testar, porque eram muito triviais.

Enumere as alterações que fez e uma a uma, e vá revisando seu código. Você deve revisar principalmente os algoritmos que envolvem um ou mais casos abaixo:

  • algoritmos recursivos (i.e. métodos que chamam eles mesmos)
  • laços de repetição (principalmente while, que é mais fácil de dar problema)
  • sobrecarga de operadores (muito úteis para objetos, mas perigosos também)
  • palavra reservada “goto” (evite usar, afinal não estamos programando em Assembly…)
  • tratamento de erros (try/catch) que tentam refazer a tarefa que deu errado

Essas dicas cobrem mais de 90% dos casos mais comuns de “Connection reset by peer” causados por mau funcionamento de código.

Como prevenir?

Pode parecer óbvio, mas para alguns programadores não é: teste. Nunca mande nada para produção sem testar antes, e de preferência, de forma unitária, isto é, somente o método que foi alterado, de forma independente do restante do sistema. Obviamente se você usar TDD, será muito fácil identificar os problemas logo que eles são desenvolvidos e antes de ir para o ar, pois esse tipo de erro não passaria nos testes automatizados.

Espero ter ajudado, e se alguém salvou o seu pescoço por causa desse post, não me importo se agradecerem nos comentários!

Livro Node.js

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

5 Replies to “Erro 104: Connection reset by peer”

renatojleite

Luiz, beleza?Cara meu site está dando esse problema. Conseguiria me dar um norte em como resolver ou pesquisar a solução disso.. http://blog.weddin.me/ É um site em WordPress (php) e estou fazendo uma série de ajustes no layout (em ambiente de produção direto) e com frequência está dando esse erro “(104) Connection reset by peer” e algumas vezes dá o erro “(111) Connection refused”

Luiz Fernando Jr

Boa tarde Renato. As vezes que presenciei isso eram quase sempre laços mal feitos que penduravam o servidor. No caso de WordPress isso pode ser causado por você ter mexido em algum código PHP e deixá-lo com algum loop infinito ou então algum plugin mal feito que você pode estar usando. Um abraço.

renatojleite

Luiz obrigado pela resposta rápida! No código php eu não mexi ainda, mas tenho experimentado diversos plugins. Cara será que não existe alguma coisa/ferramenta para eu conseguir visualizar qual plugin ou o que está disparando em loop infinito no meu site? Acha que se eu trabalhar no site for do ambiente de produção (local) resolveria? Eu não sei configurar isso, mas estou disposto a pagar para alguém me resolver isso.. estou com site parado por causa disso, caso vc saiba fazer e puder me ajudar nisso, me ajudaria muito. Obrigado de qualquer forma.

Luiz Fernando Jr

Pode ser algum problema no seu servidor também, que pode estar dropando as conexões. Ferramentas de monitoramento tipo a New Relic podem te ajudar a entender o que estava acontecendo no momento do erro. Eu não tenho experiência com PHP para te ajudar com seu site, procure o suporte da empresa de hospedagem que você usa que eles poderão te ajudar melhor.

renatojleite

Obrigado Luiz, vou falar com eles sim! Qualquer novidade volto aqui..rsrs Muito obrigado. Abs