
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