LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2083|回复: 3

请教关于sendmsg的返回值

[复制链接]
发表于 2007-6-27 10:46:18 | 显示全部楼层 |阅读模式
帮助说返回值是发送的字节数,但是这个函数到底发送出去什么了呢,好像不是整个msghdr结构啊,比如下面这段代码:

  1. #include <sys/socket.h>
  2. #include <stdlib.h>

  3. #define CONTROLLEN        CMSG_LEN(sizeof(int))

  4. static struct cmsghdr        *cmptr = NULL;

  5. int
  6. send_fd(int fd, int fd_to_send)
  7. {
  8.         struct iovec        iov[1];
  9.         struct msghdr        msg;
  10.         char                buf[2];
  11.        
  12.         iov[0].iov_base = buf;
  13.         iov[0].iov_len = 2;
  14.         msg.msg_iov = iov;
  15.         msg.msg_iovlen = 1;
  16.         msg.msg_name = NULL;
  17.         msg.msg_namelen = 0;
  18.         if (fd_to_send < 0) {
  19.                 msg.msg_control = NULL;
  20.                 msg.msg_controllen = 0;
  21.                 buf[1] = -fd_to_send;
  22.                 if (buf[1] == 0)
  23.                         buf[1] = 1;
  24.         } else {
  25.                 if (cmptr == NULL && (cmptr = malloc(CONTROLLEN)) == NULL)
  26.                         return(-1);
  27.                 cmptr->cmsg_level = SOL_SOCKET;
  28.                 cmptr->cmsg_type = SCM_RIGHTS;
  29.                 cmptr->cmsg_len = CONTROLLEN;
  30.                 msg.msg_control = cmptr;
  31.                 msg.msg_controllen = CONTROLLEN;
  32.                 *(int *)CMSG_DATA(cmptr) = fd_to_send;
  33.                 buf[1] = 0;
  34.         }
  35.         buf[0] = 0;
  36.         [color="Red"]if (sendmsg(fd, &msg, 0) != 2)[/color]
  37.                 return(-1);
  38.         return(0);
  39. }
复制代码

这里它为什么取2呢,难道返回值是buf数组的大小?但是我觉得至少也应该包括CMSG_DATA宏指向的数据啊,不解,请指教,谢谢
发表于 2007-6-28 06:51:25 | 显示全部楼层
没用过这个函数,但是感觉返回的2就是buf的大小,其它的msghdr字段都是附加的控制信息,不算在发送字节内。
回复 支持 反对

使用道具 举报

发表于 2007-6-28 09:45:58 | 显示全部楼层
原来如此,受教了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-28 20:27:51 | 显示全部楼层
谢谢roamingo兄啊,这个函数的功能就是进程间传递描述符,那么我觉得至少CMSG_DATA指向的数据也是被发送出去的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表