菜单
  

    5、EAGAIN 此操作会令进程阻断, 但参数s 的socket 为不可阻断.

    6、ENOBUFS 系统的缓冲内存不足

    7、ENOMEM 核心内存不足 EINVAL 传给系统调用的参数不正确.

    附属数据msg_control结构 

    控制信息头部本身由下面的C结构定义:

     

    struct cmsghdr {

        socklen_t cmsg_len;

        int       cmsg_level;

        int       cmsg_type;

    /* u_char     cmsg_data[]; */

    };

    其成员描述如下:

     

    成员             描述

    cmsg_len        附属数据的字节计数,这包含结构头的尺寸。这个值是由CMSG_LEN()宏计算的。

    cmsg_level      这个值表明了原始的协议级别(例如,SOL_SOCKET)。

    cmsg_type       这个值表明了控制信息类型(例如,SCM_RIGHTS)。

    cmsg_data       这个成员并不实际存在,用来指明实际的额外附属数据所在的位置。

    用sendmsg来传递数据程序实例

     

    /*sendmsg.c*/

    #include <stdio.h>

    #include <stdlib.h>

    #include <unistd.h>

    #include <errno.h>

    #include <string.h>

    #include <sys/types.h>

    #include <sys/socket.h>

     

    int main(int argc,char *argv[])

    {

        int ret;     /* 返回值 */

        int sock[2];    /* 套接字对 */

        struct msghdr msg;

        struct iovec iov[1];

        char send_buf[100] = "it is a test";

        struct msghdr msgr;

        struct iovec iovr[1];

        char recv_buf[100];

     

        /* 创建套接字对 */

        ret = socketpair(AF_LOCAL,SOCK_STREAM,0,sock);

        if(ret == -1){

            printf("socketpair err\n");

            return 1;   

        }

     

        /* sock[1]发送数据到本地主机  */

        bzero(&msg, sizeof(msg));

        msg.msg_name = NULL;        /* void*类型 NULL本地地址*/

        msg.msg_namelen = 0;

        iov[0].iov_base = send_buf;

        iov[0].iov_len = sizeof(send_buf);

        msg.msg_iov = iov;//要发送或接受数据设为iov

        msg.msg_iovlen = 1;//1个元素

     

        printf("开始发送数据:\n");

        printf("发送的数据为: %s\n", send_buf);

        ret = sendmsg(sock[1], &msg, 0 );

        if(ret == -1 ){

            printf("sendmsg err\n");

            return -1;

        }

        printf("发送成功!\n");

     

        /* 通过sock[0]接收发送过来的数据 */

        bzero(&msg, sizeof(msg));

        msgr.msg_name = NULL;   

        msgr.msg_namelen = 0;

        iovr[0].iov_base = &recv_buf;

        iovr[0].iov_len = sizeof(recv_buf);

        msgr.msg_iov = iovr;

        msgr.msg_iovlen = 1;

  1. 上一篇:关心下一代工作委员会工作心得体会
  2. 下一篇:<activity-alias>标签详解和使用
  1. FileSystemWatcher的C#的FileSystemWatcher用法

  2. python中yield的用法举例

  3. @Deprecated注解功能用法不建议使用废弃的

  4. explicit c++中的作用和用法

  5. request.form的用法简介

  6. 多智能体系统一致性问题研究

  7. Bootstrap的OpenGL人体模型仿真

  8. PLC焊机电气控制系统设计开题报告

  9. 淮安乐天玛特连锁超市4P营销策略分析

  10. MATLAB动车组列车牵引变流...

  11. PLC启闭机液压系统设计及其故障诊断

  12. 跨国企业全球营销策略的市场定位调查

  13. 上市公司债务税盾文献综述和参考文献

  14. 友谊质量调查问卷表

  15. 小学课堂教学效率国内外研究现状和参考文献

  

About

751论文网手机版...

主页:http://www.751com.cn

关闭返回