博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
值-结果参数
阅读量:4671 次
发布时间:2019-06-09

本文共 920 字,大约阅读时间需要 3 分钟。

值-结果参数(socket编程中一到七的struct sockaddr_in的长度参数)

1.概念:当函数参数是从内核到进程时,函数被调用时参数大小是一个值,它告诉内核该参数的结构大小避免内核写操作越界,函数返回时,参数的结构大小又是一个结果,它告诉进程内核写进数据的多少,这种参数叫做值-结果参数
2.例子:八个socket编程中涉及的函数中,总是通过指针来传递指向结构的指针。同时结构的长度也作为参数来传递,但是其传递的方法取决于结构的传递方向:是从内核到进程还是从进程到内核。详细如下:
1>.参数从进程到内核:
bind、connect从进程到内核传递参数,它明确知道要拷贝多少以及拷贝的数据。因此一般传递一个长度,例如:
struct sockaddr_in addr;
memset(&inAddr, 0, sizeof(inAddr));
addr.sin_addr.s_addr=inet_addr(INADDR_ANY);
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);
//..........
connect( sockfd, (struct sockaddr*)&addr, sizeof(addr) );
2>.参数从内核到进程:
accept、getsockname、getpeername,函数被调用时结构大小是一个值,它告诉内核该结构的大小避免内核写操作越界,函数返回时,结构大小又是一个结果,它告诉进程内核写进数据的多少,这种参数叫做值-结果参数。例如:
struct sockaddr_in addr;
//..........
socklen_t len = sizeof(addr);
getpeername( sockfd, (struct sockaddr*)&addr, &len );
[Remark]
sendto是从进程到内核传递参数的。
recvfrom是从内核到进程传递参数的。

转载于:https://www.cnblogs.com/isohybrid/archive/2012/11/05/sockaddr_in.html

你可能感兴趣的文章
51nod 1101 换零钱 【完全背包变形/无限件可取】
查看>>
python单例设计模式(待补充)
查看>>
Binary Tree Inorder Traversal
查看>>
HDU 1394 Minimum Inversion Number (数据结构-线段树)
查看>>
ansible-playbook && Roles && include
查看>>
[Alpha阶段]第二次Scrum Meeting
查看>>
关于Java 8 forEach
查看>>
.NET设计模式(1):1.1 单例模式(Singleton Pattern)
查看>>
创建模态对话框和非模态对话框
查看>>
08-图8 How Long Does It Take
查看>>
二维数组中最大连通子数组
查看>>
java 正则表达式-忽略大小写与多行匹配
查看>>
mac 上亚马逊密钥登录
查看>>
css选择器中:first-child与:first-of-type的区别
查看>>
nopcommerce 二次开发
查看>>
NHibernate入门实例
查看>>
IBM_DS5020磁盘阵列做raid、热备并把盘阵挂在服务器上的步骤
查看>>
svg制作风车旋转
查看>>
《软件工程》课堂作业:返回一个整数数组中最大字数组的和
查看>>
ACM 美素数 (没AC)
查看>>