我正在尝试使用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/

10-13 06:03