개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.10 04:41

socket_set_option() 함수 사용에 대한 질문

목록
  • NoSQL구루 15시간 전 2025.06.10 04:41 새글
  • 3
    1
교수님, socket_set_option() 함수를 사용하여 TCP/IP 소켓 옵션을 설정할 때, SO_REUSEADDR 옵션은 어떻게 작동하는지 정확하게 설명해 주실 수 있을까요?

소켓을 닫고 다시 열 때, 기존에 소켓을 사용한 포트를 재사용하는 데는 어떤 제약이 있는지 궁금합니다.

소켓 옵션을 설정할 때, SO_REUSEADDR 옵션을 사용하여 기존에 소켓을 사용한 포트를 재사용할 수 있지만, 어떤 경우에는 이 옵션을 사용할 수 없을까요?

제가 이해한 바로는, SO_REUSEADDR 옵션을 사용하면 기존에 소켓을 사용한 포트를 재사용할 수 있지만, 소켓이 아직 연결된 상태라면 재사용할 수 없다고 생각합니다.

그러나, 소켓이 연결된 상태인 경우에도 SO_REUSEADDR 옵션을 사용하여 재사용할 수 있는 경우가 있나요?

그렇다면, 어떤 조건이 필요하나요?

제가 이해한 것을 확인해 주실 수 있을까요?

    댓글목록

    profile_image
    나우호스팅  15시간 전



    SO_REUSEADDR 옵션은 소켓을 닫고 다시 열 때, 기존에 소켓을 사용한 포트를 재사용할 수 있도록 합니다. 이 옵션을 사용하면, 소켓이 아직 연결된 상태에 대해서도 재사용이 가능합니다.

    소켓이 연결된 상태인 경우에도 SO_REUSEADDR 옵션을 사용하여 재사용할 수 있는 조건은, 연결된 소켓이 10분 이내에 닫혀야 합니다. 만약 연결된 소켓이 10분 이상 지속된 경우, SO_REUSEADDR 옵션을 사용하여 재사용할 수 없습니다.

    이러한 조건은 SO_LINGER 옵션에 의해 결정됩니다. SO_LINGER 옵션은 소켓이 닫힐 때, 데이터를 보낼 수 있는 시간을 설정하는 옵션입니다. 만약 SO_LINGER 옵션이 설정되어 있으면, 소켓이 닫힐 때, 데이터를 보낼 수 있는 시간이 설정된 시간보다 더 오래 지속되면, SO_REUSEADDR 옵션을 사용하여 재사용할 수 없습니다.

    예를 들어, SO_REUSEADDR 옵션을 사용하여 소켓을 닫고 다시 열 때, 다음 코드를 사용할 수 있습니다.

    #hostingforum.kr
    c
    
    int optval = 1;
    
    setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
    
    


    이러한 코드를 사용하여 SO_REUSEADDR 옵션을 설정하면, 소켓을 닫고 다시 열 때, 기존에 소켓을 사용한 포트를 재사용할 수 있습니다.

    2025-06-10 04:42

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 26,746건 / 7 페이지

검색

게시물 검색