Endereço Python [Errno 98] já em uso


91

No meu programa de soquete Python, às vezes preciso interrompê-lo com Ctrl-C. Quando eu faço isso, ele fecha a conexão usando socket.close().

No entanto, quando tento reabri-lo, tenho que esperar cerca de um minuto antes de poder conectar novamente. Como se fecha corretamente um soquete? Ou isso é pretendido?

Respostas:


115

Sim, é pretendido. Aqui você pode ler a explicação detalhada . É possível substituir esse comportamento configurando a opção SO_REUSEADDR em um soquete. Por exemplo:

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

Estranho. Eu chamei isso antes de vincular e o erro ainda está ocorrendo. Devo estar cometendo um erro em outro lugar.
byxor

Esqueça, eu tive uma condição de corrida bizarra ao ligar e desligar repetidamente em threads diferentes para meus testes automatizados.
byxor

Você precisa importar um módulo chamado socket.
Bartosz

30
$ ps -fA | grep python
501 81211 12368   0  10:11PM ttys000    0:03.12  
python -m SimpleHTTPServer

$ kill 81211

1
Infelizmente, nem sempre funciona. Este foi o meu pensamento imediato quando me deparei com esse problema, mas não há nenhum processo Python para eliminar no meu caso.
Kryten


12

porque você está tentando rodar serviço na mesma porta que já está rodando.

algum tempo acontecerá porque seu serviço não foi interrompido na pilha de processos. você tem que matá-los

não há necessidade de instalar nada aqui é o comando de uma linha para matar todos os processos Python em execução.

para sistema operacional baseado em Linux:

Bash:

kill -9 $(ps -A | grep python | awk '{print $1}')

Peixe:

kill -9 (ps -A | grep python | awk '{print $1}')

1
Funcionou para mim, obrigado!
Código

1
Funcionou para mim, obrigado
user007

6

Nada funcionou para mim, exceto executar um subprocesso com este comando, antes de chamar HTTPServer(('', 443), myHandler):

kill -9 $(lsof -ti tcp:443)

Claro que isso é apenas para sistemas operacionais semelhantes ao Linux!



4

Em primeiro lugar, encontre o ID do processo Python usando este comando

ps -fA | grep python

Você obterá um número pid nomeando seu processo python na segunda coluna

Em seguida, elimine o processo usando este comando

kill -9 pid

0

Obteve o mesmo erro:
Passos seguidos:
1 - usado $ ps -fA | grep python
2 - Matou todo o processo
3 - Terminal fechado
4 - relançou e lançou o aplicativo (mkchromecast).
5 - não recebi esta mensagem de erro.

Tenho outro problema. acompanhando isso.


0

execute o comando

fuser -k (port_number_you_are _trying_to_access)/TCP

exemplo para frasco: fuser -k 5000/tcp

Além disso, lembre-se de que este erro surge quando você interpõe por ctrl + z. então para encerrar use ctrl + c

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.