개발자 Q&A

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

2025.04.13 17:24

socket_get_option() 함수 사용 중 문제 발생

목록
  • AWS매니아 2일 전 2025.04.13 17:24
  • 26
    1
안녕하세요 선생님, socket programming 과목에서 socket_get_option() 함수를 사용 중인데, 이 함수의 SO_LINGER 옵션에 대해 이해가 잘 안 가네요. SO_LINGER 옵션이란 무엇이고, 어떻게 사용해야 하는지 알려주세요.

    댓글목록

    profile_image
    나우호스팅  2일 전



    SO_LINGER 옵션은 소켓에서 데이터를 전송하는 동안 일시적으로 소켓을 닫을 수 있는 옵션입니다. 이 옵션을 사용하면 소켓을 닫을 때 데이터가 전송되지 않은 채로 남아 있는 경우, 소켓을 닫을 때 데이터를 전송하는 대신 데이터를 전송하지 않고 소켓을 닫을 수 있습니다.

    SO_LINGER 옵션을 사용하기 위해서는 socket_get_option() 함수를 사용하여 SO_LINGER 값을 설정해야 합니다.

    #hostingforum.kr
    c
    
    int linger = 1; // linger 옵션을 1로 설정
    
    int optval = linger;
    
    setsockopt(fd, SOL_SOCKET, SO_LINGER, &optval, sizeof(optval));
    
    


    이러한 옵션을 사용할 때 주의할 점은, SO_LINGER 옵션을 사용하면 데이터가 전송되지 않은 채로 소켓을 닫을 수 있으므로, 데이터 전송이 완료된 후 소켓을 닫는 것이 좋습니다.

    또한, SO_LINGER 옵션을 사용할 때는 SO_LINGER_TIME 옵션도 함께 사용하는 것이 좋습니다. SO_LINGER_TIME 옵션은 소켓을 닫을 때 데이터가 전송되지 않은 채로 남아 있는 경우, 데이터를 전송하는 데 필요한 시간을 설정하는 옵션입니다.

    #hostingforum.kr
    c
    
    int linger_time = 5; // linger_time 옵션을 5초로 설정
    
    int optval = linger_time;
    
    setsockopt(fd, SOL_SOCKET, SO_LINGER, &optval, sizeof(optval));
    
    


    이러한 옵션을 사용하면 소켓을 닫을 때 데이터가 전송되지 않은 채로 남아 있는 경우, 데이터를 전송하는 데 필요한 시간을 설정할 수 있습니다.

    #hostingforum.kr
    c
    
    int main() {
    
        int fd = socket(AF_INET, SOCK_STREAM, 0);
    
        struct linger linger_opt;
    
        linger_opt.l_onoff = 1;
    
        linger_opt.l_linger = 5;
    
        setsockopt(fd, SOL_SOCKET, SO_LINGER, &linger_opt, sizeof(linger_opt));
    
        // 소켓을 닫습니다.
    
        close(fd);
    
        return 0;
    
    }
    
    


    이러한 예제에서, 소켓을 닫을 때 데이터가 전송되지 않은 채로 남아 있는 경우, 5초 동안 데이터를 전송하도록 설정되어 있습니다.

    이러한 옵션을 사용할 때는 주의할 점이 있으므로, 데이터 전송이 완료된 후 소켓을 닫는 것이 좋습니다.

    2025-04-13 17:25

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

검색

게시물 검색