내 파이썬 소켓 프로그램에서 가끔 Ctrl-C. 이렇게하면을 사용하여 연결을 닫습니다 socket.close()
.
그러나 다시 열려고 할 때 1 분 정도 기다려야 다시 연결할 수 있습니다. 소켓을 올바르게 닫는 방법은 무엇입니까? 아니면 이것이 의도 된 것입니까?
답변:
예, 의도 된 것입니다. 여기에서 자세한 설명을 읽을 수 있습니다 . 소켓에서 SO_REUSEADDR 옵션을 설정하여이 동작을 재정의 할 수 있습니다. 예를 들면 :
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
$ ps -fA | grep python
501 81211 12368 0 10:11PM ttys000 0:03.12
python -m SimpleHTTPServer
$ kill 81211
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)
이미 실행중인 동일한 포트에서 서비스를 실행하려고하기 때문입니다.
서비스가 프로세스 스택에서 중지되지 않았기 때문에 언젠가는 발생합니다. 당신은 그들을 죽여야합니다
여기에 아무것도 설치할 필요가 없습니다 . 실행중인 모든 파이썬 프로세스를 죽이는 한 줄 명령 만 있으면됩니다.
Linux 기반 OS의 경우 :
세게 때리다:
kill -9 $(ps -A | grep python | awk '{print $1}')
물고기:
kill -9 (ps -A | grep python | awk '{print $1}')
나를 위해 일한 간단한 해결책은 터미널을 닫고 다시 시작하는 것입니다.
동일한 오류가 발생했습니다. 수행 한
단계 :
1-사용됨 $ ps -fA | grep python
2-모든 프로세스를
종료했습니다. 3-터미널 종료
4-애플리케이션을 다시 시작하고 실행했습니다 (mkchromecast).
5-이 오류 메시지를받지 못했습니다.
다른 문제가 있습니다. 그것에 후속.
명령을 실행
fuser -k (port_number_you_are _trying_to_access)/TCP
플라스크의 예 : fuser -k 5000/tcp
또한이 오류는 ctrl + z로 입력 할 때 발생합니다. 종료하려면 ctrl + c 사용