파이썬 소켓 바인딩 오류 (Python socket binding error) 알아보기.

파이썬 소켓 바인딩 오류 (Python socket binding error)

소개

소켓(Socket)은 인터넷에서 데이터를 주고받을 때 사용되는 메커니즘 중 하나입니다. 파이썬에서는 socket을 다루기 위해 socket이라는 모듈을 제공합니다. 하지만 소켓 프로그래밍을 하다보면 다양한 오류가 발생할 수도 있습니다. 여기서는 파이썬에서 소켓을 사용할 때 자주 발생하는 바인딩 오류에 대해서 알아보겠습니다.

오류 메시지

바인딩 오류는 다음과 같은 메시지와 함께 발생합니다.

socket.error: [Errno 98] Address already in use

이 오류는 소켓을 바인딩할 때 이미 해당 포트를 사용 중인 다른 프로세스가 있어서 발생합니다. 이 오류는 포트 번호가 중복되는 경우와 이전에 사용한 소켓이 제대로 닫히지 않아서 발생할 수 있습니다.

해결 방법

바인딩 오류를 해결하기 위해서는 다음과 같은 방법을 시도해볼 수 있습니다.

1. 다른 포트 번호 사용

바인딩할 포트 번호가 이미 사용 중인 경우, 다른 포트 번호를 사용해볼 수 있습니다. 이를 위해서는 소켓 생성 후 bind() 함수를 호출하기 전에 먼저 다른 포트 번호를 시도해보세요.

“` python
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 9000

try:
s.bind((”, port))
except socket.error as e:
print(“Error: “, e)
port += 1
s.bind((”, port))
“`

2. 이전 소켓 닫기

이전에 사용한 소켓이 이미 닫혔는지 확인해보세요. 다음과 같은 방법이 있습니다.

  • lsof -i :포트번호 명령어로 현재 해당 포트번호를 사용 중인 프로세스를 찾고 종료해보세요.
  • sudo killall -9 python3 명령어로 현재 실행 중인 파이썬 프로세스를 모두 종료해보세요.
  • sudo reboot로 서버를 다시 시작해보세요. (극단적인 방법)

3. 시간 차이 두기

이전 소켓을 닫았지만 여전히 같은 오류가 발생한다면, 시간 차이를 두고 다시 시도해보세요. 이를 위해 다음과 같이 time.sleep() 함수를 사용할 수 있습니다.

“` python
import socket
import time

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 9000

while True:
try:
s.bind((”, port))
break
except socket.error as e:
print(“Error: “, e)
port += 1
time.sleep(1)
“`

결론

파이썬에서 소켓 프로그래밍을 할 때 바인딩 오류가 발생할 수 있습니다. 해당 오류가 발생했을 때는 포트 번호를 변경하거나 이전에 사용한 소켓이 정상적으로 닫혔는지 확인하며, 시간 차이를 두고 다시 시도해보는 등 다양한 방법을 시도해볼 수 있습니다.