개발자 Q&A

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

2025.04.06 15:01

socket_getopt 함수의 사용법과 옵션에 대한 궁금증

목록
  • Flutter전문가 1일 전 2025.04.06 15:01
  • 2
    1
제가 socket_getopt 함수를 사용하려고 하는데, 이 함수의 옵션 중 'SO_REUSEADDR' 옵션에 대해 설명해 주시겠어요? 이 옵션은 어떤 상황에서 사용해야 하나요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    SO_REUSEADDR 옵션은 소켓을 재사용할 수 있도록 해주는 옵션입니다.

    예를 들어, 서버 프로그램을 종료하고 다시 실행하는 경우, 이전에 사용한 포트를 다시 사용할 수 있습니다.

    이 옵션을 사용하면, 소켓이 종료된 후에도 소켓을 다시 열 수 있기 때문에, 서버 프로그램을 종료하고 다시 시작할 때, 이전에 사용한 포트를 다시 사용할 수 있습니다.

    이 옵션을 사용하는 예제는 다음과 같습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        int sock;
    
        struct sockaddr_in serv_addr;
    
        int optval;
    
        socklen_t optlen = sizeof(optval);
    
    
    
        // 소켓을 생성하고 SO_REUSEADDR 옵션을 설정
    
        sock = socket(AF_INET, SOCK_STREAM, 0);
    
        optval = 1;
    
        setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
    
    
    
        // 서버 주소 설정
    
        serv_addr.sin_family = AF_INET;
    
        serv_addr.sin_port = htons(8080);
    
        inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr);
    
    
    
        // 서버를 시작
    
        bind(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
    
        listen(sock, 5);
    
    
    
        printf("서버가 시작되었습니다.n");
    
    
    
        // 클라이언트를 기다립니다.
    
        while (1) {
    
            int client_sock;
    
            struct sockaddr_in client_addr;
    
            socklen_t client_len = sizeof(client_addr);
    
            client_sock = accept(sock, (struct sockaddr*)&client_addr, &client_len);
    
    
    
            if (client_sock < 0) {
    
                perror("accept failed");
    
                continue;
    
            }
    
    
    
            printf("클라이언트가 연결되었습니다.n");
    
            // 클라이언트와 통신합니다.
    
            char buffer[256];
    
            recv(client_sock, buffer, 256, 0);
    
            printf("클라이언트가 보낸 메시지: %sn", buffer);
    
    
    
            close(client_sock);
    
        }
    
    
    
        close(sock);
    
        return 0;
    
    }
    
    


    이 예제에서, 서버 프로그램을 종료하고 다시 시작할 때, 이전에 사용한 포트를 다시 사용할 수 있습니다.

    2025-04-06 15:02

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

검색

게시물 검색