毕业论文

当前位置: 毕业论文 > 范文 >

socketpair()套接字用法例子和理解(3)

时间:2021-03-09 13:00来源:优尔论文
5、EAGAIN 此操作会令进程阻断, 但参数s 的socket 为不可阻断. 6、ENOBUFS 系统 的缓冲内存不足 7、ENOMEM 核心内存不足 EINVAL 传给系统调用的参数不正确. 附属数

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; socketpair()套接字用法例子和理解(3):http://www.youerw.com/fanwen/lunwen_71106.html

------分隔线----------------------------
推荐内容