我正在尝试使用UNIX DOMAIN SOCKETS编写一个小的Client-Server应用程序。
我将msghdr
用于sendmsg
/ recvmsg
,但是当我编译以下代码时,它给我以下错误:
include <sys/socket.h>
...
struct msghdr mh;
struct cmsghdr *cmp;
union{
struct cmsghdr cm;
char ctrl[sizeof(struct cmsghdr) + sizeof(int)];
} ctrlu;
...
mh.msg_name = NULL;
mh.msg_namelen = 0;
mh.msg_iov = iov;
mh.msg_iovlen = 1;
mh.msg_control = ctrlu.ctrl;
mh.msg_controllen = sizeof(ctrlu);
mh.msg_flags = 0;
错误信息:
gcc s.c -o s -lsocket
s.c:在函数“ main”中:
s.c:59:错误:结构没有名为“ msg_control”的成员
s.c:60:错误:结构没有名为“ msg_controllen”的成员
s.c:61:错误:结构没有名为“ msg_flags”的成员
*错误代码1
最佳答案
这在Solaris中似乎是一个错误,在Linux中可以正常工作。 (您没有确切指定操作系统,但是我看到您使用了-lsocket
编译器选项,在Linux中这不是必需的)
关于c - sys/socket缺少msgdr成员:msg_control,msg_controllen,msg_flags,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16772138/