UnixSocketV1Chap3SocketBasic

第三章:套接口编程简介

1、协议相关套接口地址和通用套接口地址

有四种协议相关的套接口类型:IPV4,IPV6,Unix域和数据链路。每种协议都有自己的地址结构类型。

 

当套接口地址作为参数传递给任一socket API函数时,是作为指针来传递的,但socket API函数必须能够处理来自所支持的任何协议族的套接口地址结构。

那这个参数的类型申明成什么呢?

ANSI C可以通过指针类型void* 来解决这个问题,但是socketAPI是在ANSI C之前定义的,所以当时就想出了一个通用套接口地址结构。

四种协议相关套接口地址结构如下:

 

2、值-结果参数

(1)从进程到内核

有三个函数:bind、connect和sendto,一个参数是通用套接口地址结构指针,另一个参数是结构的整数大小。

Struct sockaddr_in serv;

Connect( sockfd, (SA *)&serv,sizeof(serv) );

由于指针和指针所指结构的大小都传递给内核,所以从进程到内核要确切拷贝多少数据是知道的。

 

(2)从内核到进程

从内核到进程传递套接口地址结构有4个函数:

Accept、recvfrom、getsockname和getpeername这个四个函数的两个参数是:指向套接口地址结构的指针和指向标示结构大小的整数的指针。

Struct sockaddr_un cli;

Socklen_t len;

Len = sizeof(cli);

Getpeername(unixfd, (SA *)&cli,&len);

为何将结构大小由整数改为指向整数的指针呢?这是因为:当函数被调用时,结构大小是一个值(此值告诉内核该结构的大小,使内核在写此结构时不至于越界),当函数返回时,结构大小又是一个结果(它告诉进程内核在此结构中确切存储了多少信息)(通过套接口结构最后一个参数是协议相关地址char sa_data[14],不同的协议返回不同的地址),这种参数类型叫值-结构参数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值