개발자 Q&A

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

2025.06.27 03:11

socket_cmsg_space 관련 질문

목록
  • 자바스크립트귀신 14시간 전 2025.06.27 03:11 새글
  • 3
    1
안녕 선생님, socket programming에 대해 공부중인데 socket_cmsg_space에 대해 이해가 안 가는데 도와주세요.

socket_cmsg_space는 socket option에 어떤 의미를 가집니까?
그리고 cmsg_level과 cmsg_type의 역할은 무엇인지 궁금합니다.

예를 들어서, socket_cmsg_space를 사용한 경우 socket option을 설정하는 방법이 어떻게 되나요?

    댓글목록

    profile_image
    나우호스팅  14시간 전



    socket_cmsg_space는 socket option의 메시지 헤더 공간을 의미합니다.

    cmsg_level은 메시지 헤더의 레벨을 나타내며, 일반적으로 SOL_SOCKET 또는 IPPROTO_IP과 같은 값이 사용됩니다.

    cmsg_type은 메시지 헤더의 유형을 나타내며, 예를 들어 SCM_RIGHTS, SCM_CREDENTIALS, SCM_TIMESTAMPING 등이 있습니다.

    socket option을 설정하는 방법은 다음과 같습니다.

    1. socket option을 설정할 소켓을 열고, 소켓 옵션을 설정하기 위한 메시지 헤더를 생성합니다.
    2. 메시지 헤더에 cmsg_level, cmsg_type, 그리고 socket option의 값을 설정합니다.
    3. 소켓 옵션을 설정하기 위한 시스템 호출을 사용하여 소켓 옵션을 설정합니다.

    예를 들어, SCM_RIGHTS를 사용하여 소켓 옵션을 설정하는 방법은 다음과 같습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        int sock = socket(AF_UNIX, SOCK_STREAM, 0);
    
        if (sock < 0) {
    
            perror("socket");
    
            return 1;
    
        }
    
    
    
        struct msghdr msg;
    
        struct iovec iov;
    
        char buf[1] = {0};
    
        iov.iov_base = buf;
    
        iov.iov_len = 1;
    
        msg.msg_name = NULL;
    
        msg.msg_namelen = 0;
    
        msg.msg_iov = &iov;
    
        msg.msg_iovlen = 1;
    
        msg.msg_control = NULL;
    
        msg.msg_controllen = 0;
    
    
    
        struct cmsghdr *cmsg;
    
        char cmsg_buf[CMSG_SPACE(sizeof(int))];
    
        msg.msg_control = cmsg_buf;
    
        msg.msg_controllen = sizeof(cmsg_buf);
    
    
    
        cmsg = CMSG_FIRSTHDR(&msg);
    
        cmsg->cmsg_level = SOL_SOCKET;
    
        cmsg->cmsg_type = SCM_RIGHTS;
    
        cmsg->cmsg_len = CMSG_LEN(sizeof(int));
    
        *(int *)CMSG_DATA(cmsg) = 1;
    
    
    
        if (sendmsg(sock, &msg, 0) < 0) {
    
            perror("sendmsg");
    
            return 1;
    
        }
    
    
    
        return 0;
    
    }
    
    


    이 예제에서는 SCM_RIGHTS를 사용하여 소켓 옵션을 설정하는 방법을 보여줍니다. SCM_RIGHTS는 소켓 옵션을 설정하기 위한 메시지 헤더의 유형을 나타내며, sendmsg 시스템 호출을 사용하여 소켓 옵션을 설정합니다.

    2025-06-27 03:12

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

검색

게시물 검색