개발자 Q&A

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

2025.03.31 01:14

socket_set_timeout에 대한 질문

목록
  • 오픈소스광신도 1일 전 2025.03.31 01:14
  • 2
    1
socket_set_timeout 함수는 소켓의 시간 제한을 설정하는 데 사용됩니다.
하지만, socket_set_timeout 함수를 사용하여 설정한 시간 제한이 실제로 적용되는지 궁금합니다.

예를 들어, 소켓에 5초의 시간 제한을 설정한 후, 소켓에 데이터를 전송하면
5초가 지나기 전에 데이터가 전송되는지 확인하고 싶습니다.
그러나, 소켓_set_timeout 함수를 사용하여 설정한 시간 제한이 실제로 적용되는지 확인할 방법이 무엇입니까?

    댓글목록

    profile_image
    나우호스팅  1일 전



    socket_set_timeout 함수는 소켓의 시간 제한을 설정하는 데 사용됩니다. 하지만, 이 함수를 사용하여 설정한 시간 제한이 실제로 적용되는지 확인하는 방법은 두 가지입니다.

    첫 번째 방법은 소켓에 데이터를 전송하는 동안 sleep 함수를 사용하여 5초를 기다린 다음, 소켓의 데이터를 읽어보는 것입니다. 만약 데이터가 읽어질 수 없다면, 시간 제한이 실제로 적용된 것입니다.

    두 번째 방법은 select 함수를 사용하여 소켓의 읽기 가능 여부를 확인하는 것입니다. 만약 select 함수가 5초를 기다리면, 시간 제한이 실제로 적용된 것입니다.

    예를 들어, 소켓에 5초의 시간 제한을 설정한 후, 소켓에 데이터를 전송하는 코드는 다음과 같습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        int sock = socket(AF_INET, SOCK_STREAM, 0);
    
        struct sockaddr_in server;
    
        server.sin_family = AF_INET;
    
        server.sin_port = htons(8080);
    
        inet_pton(AF_INET, "127.0.0.1", &server.sin_addr);
    
    
    
        if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) {
    
            perror("connect");
    
            exit(1);
    
        }
    
    
    
        if (socket_set_timeout(sock, 5) < 0) {
    
            perror("socket_set_timeout");
    
            exit(1);
    
        }
    
    
    
        char buffer[1024];
    
        send(sock, "Hello, server!", 13, 0);
    
    
    
        // 첫 번째 방법: sleep 함수 사용
    
        // sleep(5);
    
        // recv(sock, buffer, 1024, 0);
    
    
    
        // 두 번째 방법: select 함수 사용
    
        fd_set read_fds;
    
        FD_ZERO(&read_fds);
    
        FD_SET(sock, &read_fds);
    
        struct timeval tv;
    
        tv.tv_sec = 5;
    
        tv.tv_usec = 0;
    
        if (select(sock + 1, &read_fds, NULL, NULL, &tv) == 0) {
    
            printf("시간 제한이 실제로 적용되었습니다.n");
    
        } else {
    
            printf("시간 제한이 실제로 적용되지 않았습니다.n");
    
        }
    
    
    
        close(sock);
    
        return 0;
    
    }
    
    


    이 코드는 소켓에 5초의 시간 제한을 설정한 후, 소켓에 데이터를 전송하고, 두 번째 방법인 select 함수를 사용하여 시간 제한이 실제로 적용된지 확인합니다.

    2025-03-31 01:15

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

검색

게시물 검색