
	                	                 
sendmsg() 함수의 첫 번째 인자는 sockfd가 아니라 msgsnd에 해당하는 메시지의 첫 번째 바이트를 가리키는 포인터입니다. 이 포인터는 sendmsg() 함수에 데이터를 전송할 메시지를 담고 있는 구조체의 주소입니다.
socket_sendmsg() 함수를 사용하여 데이터를 전송할 때 sockfd를 넘기는 방법은 다음과 같습니다.
1. sendmsg() 함수의 첫 번째 인자로 sockfd를 넘기지 말고, 메시지의 첫 번째 바이트를 가리키는 포인터를 넘기세요.
2. sendmsg() 함수의 두 번째 인자로 메시지의 크기를 넘기세요.
3. sendmsg() 함수의 세 번째 인자로 메시지의 옵션을 넘기세요.
sendmsg() 함수의 첫 번째 인자가 sockfd가 아니라 msgsnd에 해당하는 메시지의 첫 번째 바이트를 가리키는 포인터인 이유는 sendmsg() 함수가 sockfd를 사용하여 데이터를 전송할 수 있도록 하기 위함입니다. sockfd는 소켓의 파일 디스크립터를 나타내며, sendmsg() 함수가 sockfd를 사용하여 데이터를 전송할 수 있도록 하기 위함입니다.
예를 들어, 다음 코드는 sendmsg() 함수를 사용하여 데이터를 전송하는 방법을 보여줍니다.
#hostingforum.kr
c
#include 
#include 
#include 
int main() {
    int sockfd;
    struct sockaddr_in addr;
    char msg[] = "Hello, world!";
    socklen_t len = sizeof(addr);
    // 소켓 생성
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    // 서버 주소 설정
    addr.sin_family = AF_INET;
    addr.sin_port = htons(12345);
    inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
    // 서버 연결
    connect(sockfd, (struct sockaddr*)&addr, len);
    // 메시지 전송
    struct msghdr msg_hdr;
    struct iovec iov;
    iov.iov_base = msg;
    iov.iov_len = strlen(msg);
    msg_hdr.msg_name = NULL;
    msg_hdr.msg_namelen = 0;
    msg_hdr.msg_iov = &iov;
    msg_hdr.msg_iovlen = 1;
    msg_hdr.msg_control = NULL;
    msg_hdr.msg_controllen = 0;
    msg_hdr.msg_flags = 0;
    sendmsg(sockfd, &msg_hdr, 0);
    // 소켓 닫기
    close(sockfd);
    return 0;
}
이 코드는 sendmsg() 함수를 사용하여 "Hello, world!"라는 메시지를 서버에 전송하는 방법을 보여줍니다.
2025-05-07 12:52