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?

Skylerl
fonte

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)
Bartosz
fonte
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
ayoub laaziz
fonte
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}')
MohitGhodasara
fonte
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!

Mirko
fonte
5

Uma solução simples que funcionou para mim é fechar o Terminal e reiniciá-lo.

Siddharth Sethia
fonte
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
Abdul Basit
fonte
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.

silvertech048
fonte
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

Manoj Kumar M
fonte