인프런 커뮤니티 질문&답변
bind(): Address already in use
작성
·
10
0
한 번 소켓 예제 테스트하고 난 다음에
또 실행하면
bind(): Address already in use
라고 나옵니다.
close랑 상관없이
항상 소켓파일을 지워줘야 하나요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. random123님.
소켓을 다시 실행할 때 “bind(): Address already in use” 에러는 자주 발생하는 문제입니다. 이 문제는 소켓이 TCP state machine에 의해 아직 완벽하게 종료되지 않은 상태에서 다시 사용하려고 할 때 발생할 수 있습니다.
일반적으로 아래와 같은 방법으로 문제를 해결할 수 있습니다:
SO_REUSEADDR 옵션 사용: 소켓 옵션 중 하나인
SO_REUSEADDR을 설정해주세요. 이 옵션을 설정하면, 이전 연결이 완전히 종료되지 않았더라도 동일한 주소와 포트로 소켓을 다시 바인딩할 수 있게 됩니다.TIME_WAIT 상태 확인: 서버 종료 후 TCP 소켓은 TIME_WAIT 상태에 있습니다. 이 시간이 지나면 포트를 사용할 수 있게 됩니다. 하지만,
SO_REUSEADDR옵션을 사용하여 대기 시간을 줄일 수 있습니다.소켓 화일 삭제: 강제로 소켓 파일(such as
sock_stream_un)을 삭제하여 다시 접속할 수 있습니다. 그러나 이는 임시적인 해결책이므로SO_REUSEADDR옵션을 사용하는 것이 더 권장됩니다.
관련된 답변과 예제는 아래 링크에서 확인하실 수 있습니다:
- 에러 - bind(): Address already in use
질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





