
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