Python [Errno 98] 이미 사용중인 주소


96

내 파이썬 소켓 프로그램에서 가끔 Ctrl-C. 이렇게하면을 사용하여 연결을 닫습니다 socket.close().

그러나 다시 열려고 할 때 1 분 정도 기다려야 다시 연결할 수 있습니다. 소켓을 올바르게 닫는 방법은 무엇입니까? 아니면 이것이 의도 된 것입니까?

답변:


120

예, 의도 된 것입니다. 여기에서 자세한 설명을 읽을 수 있습니다 . 소켓에서 SO_REUSEADDR 옵션을 설정하여이 동작을 재정의 할 수 있습니다. 예를 들면 :

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

이상한. 바인딩 직전에 이것을 호출했는데 오류가 여전히 발생합니다. 나는 다른 곳에서 실수를 한 것 같다.
byxor

신경 쓰지 마십시오. 자동화 된 테스트를 위해 별도의 스레드에서 반복적으로 바인딩하고 종료 할 때 기괴한 경쟁 조건이있었습니다.
byxor

socket이라는 모듈을 가져와야합니다.
Bartosz

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

$ kill 81211

2
불행히도 항상 작동하지는 않습니다. 이것은 내가이 문제에 부딪혔을 때 즉각적인 생각 이었지만 내 경우에는 죽일 파이썬 프로세스가 없습니다.
Kryten

22

SocketServer 모듈에서 TCPServer, UDPServer 또는 해당 하위 클래스를 사용하는 경우 다음 클래스 변수를 설정할 수 있습니다 (서버를 인스턴스화하기 전에).

SocketServer.TCPServer.allow_reuse_address = True

( SocketServer.ThreadingTCPServer 를 통해 -프로그램 재시작 후 주소에 바인딩 할 수 없음 )

이로 인해 init (생성자)가 다음을 수행합니다.

 if self.allow_reuse_address:
     self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

13

이미 실행중인 동일한 포트에서 서비스를 실행하려고하기 때문입니다.

서비스가 프로세스 스택에서 중지되지 않았기 때문에 언젠가는 발생합니다. 당신은 그들을 죽여야합니다

여기에 아무것도 설치할 필요가 없습니다 . 실행중인 모든 파이썬 프로세스를 죽이는 한 줄 명령 만 있으면됩니다.

Linux 기반 OS의 경우 :

세게 때리다:

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

물고기:

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

1
나를 위해 일했습니다 감사합니다!
코드

1
나를 위해 일했습니다 감사합니다
user007

7

다음을 호출하기 전에이 명령으로 하위 프로세스를 실행하는 것 외에는 아무것도 작동하지 않았습니다 HTTPServer(('', 443), myHandler).

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

물론 이것은 리눅스와 같은 OS에만 해당됩니다!


6

나를 위해 일한 간단한 해결책은 터미널을 닫고 다시 시작하는 것입니다.


4

우선이 명령을 사용하여 파이썬 프로세스 ID를 찾으십시오.

ps -fA | grep python

두 번째 열 에서 파이썬 프로세스의 이름을 지정하여 pid 번호를 얻습니다.

그런 다음이 명령을 사용하여 프로세스를 종료하십시오.

kill -9 pid

0

동일한 오류가 발생했습니다. 수행 한
단계 :
1-사용됨 $ ps -fA | grep python
2-모든 프로세스를
종료했습니다. 3-터미널 종료
4-애플리케이션을 다시 시작하고 실행했습니다 (mkchromecast).
5-이 오류 메시지를받지 못했습니다.

다른 문제가 있습니다. 그것에 후속.


0

명령을 실행

fuser -k (port_number_you_are _trying_to_access)/TCP

플라스크의 예 : fuser -k 5000/tcp

또한이 오류는 ctrl + z로 입력 할 때 발생합니다. 종료하려면 ctrl + c 사용

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.