UNIX网络编程学习(4)--值-结果参数
来源:互联网 发布:net use网络命令的使用 编辑:程序博客网 时间:2024/04/20 12:00
我们已经知道,当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针。结构的长度也作为参数来传递,其传递方式取决于结构的传递方向:从进程到内核,还是从内核到进程。
1、从进程到内核传递套接口地址结构有3个函数:bind、connect和sendto,这3个函数的一个参数是指向套接口地址结构的指针,另一个是结构的整数大小,例如:
struct sockaddr_in serv;/* fill in serv{} */connect( sockfd, (SA*)&serv, sizeof(serv) );
由于指针和指针所指结构的大小都传递给内核,所以从进程到内核要确切拷贝多少数据是知道的,如图3.7所示。
套接口地址结构大小的数据类型确切地说应该是socklen_t,而不是int,POSIX建议将socklen_t定于为uint32_t。
2、与前面的传递方向相反,从内核到进程传递套接口地址结构有四个函数:accept、recvfrom、getsockname 和 getpeername。这4个函数的两个参数是:指向套接口地址结构的指针和指向表示结构大小的整数的指针,例如:
struct sockaddr_un cli; /* Unix domain */socklen_t len;len = sizeof(cli);getpeername(unixfd, (SA*) &cli, &len )/* len may have changed */
为何将结构大小由整数改为指向整数的指针呢?这是因为:当函数被调用时,结构大小是一个值(value, 此值告诉内核该结构的大小,使内核在写此结构时不至于越界),当函数返回时,结构大小又是一个结果(result,它告诉进程内核在此结构中确切存储了多少信息),这种参数叫做值-结果参数(value-result)。
当使用值-结果参数作为套接口地址结构的长度时,如果套接口地址结构是定长的,则从内核返回的值也是定长的,如对于IPv4,sockaddr_in是16;对于IPv6,sockaddr_in6是28。但对于变长的套接口地址结构(如Unix域的sockaddr_un),返回值可能比结构的最大长度小。
原帖地址:http://www.cnblogs.com/ChangeIt/archive/2011/12/26/2302294.html
- UNIX网络编程学习(4)--值-结果参数
- UNIX网络编程学习
- Unix网络编程学习笔记(1)
- unix网络编程学习(1)
- unix网络编程 学习笔记(精华)
- unix网络编程 学习笔记(精华)
- unix网络编程学习手册(1)
- UNIX网络编程卷1:套接字联网-第3章:套接字编程-套接字地址结构和值结果参数
- Unix网络编程学习 1
- unix 网络编程学习 day01
- Unix网络编程学习笔记
- Unix网络编程学习日记
- UNIX网络编程 学习1
- UNIX网络编程学习笔记
- 系统学习Unix网络编程
- UNIX网络编程中的一些参数-POSIX
- Unix Network Programming(7)---值-结果参数
- 【C语言】【unix c】值结果参数
- 用顺序结构表示栈的各种基本操作
- POJ 3159 candies总结
- FILE CODE
- C/C++遍历文件夹
- 从seq_file接口读取的数据不全
- UNIX网络编程学习(4)--值-结果参数
- 关闭TCP连接的学问
- DML 、DDL、DCL、DQL介绍及区别
- View的setTag和getTag方法
- yum介绍
- 组件的基本应用
- 用循环和递归分别计算阶乘
- 第四周 任务三
- linux c 遍历文件