void *msg_control:可选的,指向辅助数据的缓冲区。 size_t msg_controllen:msg_control的长度。 int msg_flags:控制消息发送的标志位,与sendmsg的flags参数不同,这个是在msghdr结构体内部定义的。 flags:控制sendmsg行为的标志位,如MSG_DONTWAIT表示非阻塞发送。sendmsg函数的使用场景 sendmsg函数的使用场景包括但不限...
可以发送包含多个数据块的消息:sendmsg函数可以发送一个消息,消息中可以包含多个数据块,这样可以减少系统调用的次数,提高效率。 可以发送辅助数据:sendmsg函数可以发送辅助数据,比如控制信息、文件描述符等。这些辅助数据可以通过msg_control和msg_controllen字段传递。 可以指定目标地址:sendmsg函数可以通过msg_name和msg_name...
用于发送数据:sendmsg函数可以用来向另一个Unix域套接字发送数据。通过sendmsg函数可以发送多个数据块,每个数据块可以包含不同的数据和控制信息。 用于传递文件描述符:sendmsg函数可以用来传递文件描述符。通过设置msg_control字段和使用cmsghdr结构体,可以将文件描述符在不同进程之间传递。 用于发送控制信息:sendmsg函数可以...
msg_iov,msg_iovlen : 指定输入或输出的缓冲区数组。 msg_control,msg_controllen : 可选的辅助数据的位置和大小。 注意事项: 在sendmsg中,会忽略msg_flags成员,他会按照参数flags直接处理。那么当我们去设置MSG_DONTWAIT(临时非阻塞)是就把flags设为MSG_DONTWAIT而把msg_flags设为不起作用。 在recvmsg中,使用ms...
2. void *msg_name; /* optional address */ 3. /* size of address */ 4. struct iovec *msg_iov; /* scatter/gather array */ 5. size_t msg_iovlen; /* # elements in msg_iov */ 6. void *msg_control; /* ancillary data, see below */ ...
int msg_iovlen ; / * 缓冲区的个数 * / void * msg_control ; / * 辅助数据的地址 * / socklen_t msg_controllen ; / * 辅助数据的长度 * / int msg_flags ; / * 接收消息的标识 * / } ; 其中的前两个成员主要用于保存当前使用的协议的地址,比如使用了tcp协议、udp协议、UNIX domain协议等...
msg_control = ctrl_buf; msgh.msg_controllen = ALLOC_SIZE; msgh.msg_name = (caddr_t)&addr; msgh.msg_namelen = sizeof(addr); sendmsg(sockfd, &msgh, 0); } 内核实现 内核数据结构 struct msghdr { void *msg_name; /* ptr to socket address structure */ int msg_namelen; /* size...
msg--->msg_sys->msg_control--->ctl_buf 利用流程: //限制: BUFF_SIZE > 44charbuff[BUFF_SIZE];structmsghdrmsg={0};structsockaddr_inaddr={0};intsockfd=socket(AF_INET,SOCK_DGRAM,0);addr.sin_addr.s_addr=htonl(INADDR_LOOPBACK);addr.sin_family=AF_INET;addr.sin_port=htons(6666);// ...
struct msghdr { void *msg_name; /* optional address */ socklen_t msg_namelen; /* size of address */ struct iovec *msg_iov; /* scatter/gather array */ size_t msg_iovlen; /* # elements in msg_iov */ void *msg_control; /* ancillary data, see below */ size_t msg_controllen...
msg_namelen 对于 sendmsg 是一个值参数,对于 recvmsg 却是一个值-结果参数。 msg_iov 和 msg_iovlen 这两个成员指定输入或输出缓冲区数组(即iovec结构数组),类似 readv 或 writev 的第二个和第三个参数。 msg_control 和 msg_controllen 这两个成员指定可选的辅助数据的位置和大小。msg_controllen 对于 re...