개발자 Q&A

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

2025.05.25 07:07

socket_set_option 관련 질문내용

목록
  • 백엔드도령 6일 전 2025.05.25 07:07
  • 9
    1
socket_set_option 함수를 사용하여 소켓 옵션을 설정할 때,

SO_REUSEADDR 옵션을 사용하여 소켓을 재사용할 수 있나요?

소켓을 재사용할 때, 어떤 문제가 발생할 수 있을까요?

SO_REUSEADDR 옵션을 사용하는 방법을 알려주세요.

    댓글목록

    profile_image
    나우호스팅  6일 전



    socket_set_option 함수를 사용하여 소켓 옵션을 설정할 때, SO_REUSEADDR 옵션을 사용하여 소켓을 재사용할 수 있습니다.

    SO_REUSEADDR 옵션을 사용하면 소켓이 종료된 후, 동일한 주소와 포트를 사용하는 새로운 소켓을 생성할 수 있습니다.

    소켓을 재사용할 때, 다음 문제가 발생할 수 있습니다.

    1. 소켓이 이미 사용 중인 경우, 새로운 소켓이 생성되지만, 이전 소켓의 연결이 끊어지지 않습니다.
    2. 소켓이 이미 사용 중인 경우, 새로운 소켓이 생성되지만, 이전 소켓의 데이터가 새로운 소켓에 전달되지 않습니다.

    SO_REUSEADDR 옵션을 사용하는 방법은 다음과 같습니다.

    1. socket_set_option 함수를 사용하여 SO_REUSEADDR 옵션을 설정합니다.

    #hostingforum.kr
    c
    
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    
    struct sockaddr_in addr;
    
    addr.sin_family = AF_INET;
    
    addr.sin_port = htons(8080);
    
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    
    
    
    if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
    
        perror("bind");
    
        exit(1);
    
    }
    
    
    
    if (listen(sock, 3) == -1) {
    
        perror("listen");
    
        exit(1);
    
    }
    
    
    
    if (socket_set_option(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1) {
    
        perror("socket_set_option");
    
        exit(1);
    
    }
    
    


    2. 소켓을 재사용할 때, 새로운 소켓을 생성하고, 이전 소켓의 연결을 끊어줍니다.

    #hostingforum.kr
    c
    
    int new_sock = socket(AF_INET, SOCK_STREAM, 0);
    
    struct sockaddr_in addr;
    
    addr.sin_family = AF_INET;
    
    addr.sin_port = htons(8080);
    
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    
    
    
    if (bind(new_sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
    
        perror("bind");
    
        exit(1);
    
    }
    
    
    
    if (listen(new_sock, 3) == -1) {
    
        perror("listen");
    
        exit(1);
    
    }
    
    
    
    // 이전 소켓의 연결을 끊어줍니다.
    
    close(sock);
    
    


    소켓을 재사용할 때, 주의할 점은 소켓이 이미 사용 중인 경우, 새로운 소켓이 생성되지만, 이전 소켓의 연결이 끊어지지 않습니다. 따라서, 새로운 소켓을 생성하고, 이전 소켓의 연결을 끊어줘야 합니다.

    2025-05-25 07:08

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

검색

게시물 검색