소켓 오류 48은 프로세스가 이미 사용 중인 포트에 자신을 바인딩하려고 할 때 트리거되는 파이썬 오류입니다.
"socket.error:[Errno 48] 주소가 이미 사용 중입니다" 오류의 원인은 무엇입니까?
간단한 조사 끝에 다음과 같은 원인을 찾았습니다.
- 포트에 바인딩된 프로세스: 서버에서 프로세스가 생성될 때마다 인터넷과 통신하기 위해 포트가 사용됩니다. 항구는 한 번에 한 명의 손님을 접대할 수 있는 호스트와 같습니다. 그러나 포트를 지정하지 않으면 서버는 기본 포트에 포트를 생성합니다. 기본 포트가 이미 사용 중이므로 다음에 프로세스를 생성할 때 포트를 지정해야 합니다.
해결 방법 1:포트 번호 지정
이 오류는 사람이 특정 프로세스를 기본 포트에 바인딩하려고 하고 기본 포트가 이미 다른 프로세스에 바인딩되어 있을 때 주로 발생합니다. 따라서 이 단계에서는 프로세스가 바인딩될 포트를 지정합니다.
- 다음 명령을 사용하여 프로세스를 생성할 가능성이 있습니다.
$ python -m SimpleHTTPServer
- 대신 이 명령어를 사용하여 프로세스를 생성합니다.
$ python -m SimpleHTTPServer (Port Number)
- 프로세스가 생성될 때까지 기다렸다가 문제가 지속되는지 확인합니다.
해결책 2:포트 해제
포트가 이미 다른 프로세스에서 사용 중인 경우 새 프로세스는 해당 포트에서 작동할 수 없습니다. 따라서 이 단계에서는 이전 프로세스를 종료하고 새 프로세스를 실행하여 포트를 해제합니다. 이를 위해:
- 특정 포트를 사용하는 여러 프로세스를 나열하려면 다음 명령을 사용하십시오.
$ ps -fA | grep python
- 명령 인수는 다음 행과 유사합니다.
601 88234 12788 0 9:53PM ttys000 0:00.16 python -m SimpleHTTPServer
- 이 중 kill에 사용할 프로세스 코드는 "88234"입니다.
- 다음 명령을 사용하여 프로세스를 종료합니다.
kill 88234
또는 다음 명령을 사용하여 종료할 수 있습니다.
sudo kill -9 PID
- 이제 다음 명령을 사용하여 이 포트에 프로세스를 바인딩할 수 있습니다.
$ python -m SimpleHTTPServer (Port Number)
- 이제 프로세스가 생성됩니다.
해결 방법 3:Raspberry Pi 다시 시작(Raspberry Pi에만 해당)
Raspberry Pi를 다시 시작하거나 터미널 셸을 종료하여 Raspberry Pi에서 이 오류를 제거할 수 있습니다. Raspberry Pi는 때때로 프로세스를 자동으로 종료할 수 없으며 포트에서 이미 실행 중인 이전 프로세스 때문에 이 오류를 트리거합니다.