菜单
  

    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. havehas的用法

  2. microsoft.xmlhttp组件的用法和属性

  3. SendMessage函数用法详解及消息详解

  4. FileSystemWatcher的C#的FileSystemWatcher用法

  5. python中yield的用法举例

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

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

  8. 玫瑰精油特征香气成分研究

  9. 多级反馈队列调度算法的研究+源代码

  10. Toeplitz定理及其应用+文献综述

  11. 从何红舟《桥上的风景》中感受油画构成美

  12. 运动员广告形象塑造文献综述和参考文献

  13. 甲硫醇钠生产工艺设计任务书

  14. 身体自尊量表(PSPP)

  15. 街头游园设计

  16. 货币国际化国内外研究现状

  17. 进出口贸易与经济增长文献综述和参考文献

  

About

优尔论文网手机版...

主页:http://www.youerw.com

关闭返回