值-结果参数(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是从内核到进程传递参数的。

值-结果参数(socket编程中的函数举例)相关推荐

  1. SOCKET编程中,select()函数的作用

    SOCKET编程中,select()函数的作用Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accep ...

  2. IP地址的三种表示格式及在Socket编程中的应用

    转自:http://blog.csdn.net/hguisu/article/details/7449955 使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理.IP地址其 ...

  3. TCP与UDP在socket编程中的区别

    TCP与UDP在socket编程中的区别 一.TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可 ...

  4. IP地址的三种表示格式 及 在Socket编程中的应用

    关于windows中的INADDR_ANY这个宏 头文件winsock.h中定义#define INADDR_ANY              (u_long)0x00000000 它是用于多IP机器 ...

  5. socket编程流程及函数详解

    socket编程流程及函数详解-服务器端 一.创建socket 二.命名socket 2.1通用的socket地址结构体 2.2专用socket地址 三.监听socket 四.接受连接 五.总结 一. ...

  6. C++ tcpip网络编程中listen函数和accept函数详解和区别

    listen函数 摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定 ...

  7. C语言socket编程中关于read()和write()的思考

    最近开始学习C的socket编程,教材上有一处依照我对IO函数的理解,我感觉有点问题,故而研究了一下.学的很浅,可能有错漏. 1.socket编程中read()和write()内部原理 每个socke ...

  8. socket编程中htonl和htons深入探讨

    socket编程中htonl和htons深入探讨 背景: 问题分析和解决: 深入分析: 背景:   在socket编程中遇到一个错误:server端设置端口和ip时,使用htonl函数.然后clien ...

  9. socket编程中常见的概念问题!

    socket编程一般指的就是网络编程,常见的服务端和客户机都是必不可少的,今天小千就来给大家介绍一下socket编程中常见的概念问题. 一.常见传输协议 1.tcp协议 TCP (Transmissi ...

  10. socket编程中read()、write()、recv()和send()

    ​​​​​​Muduo 网络编程示例之八:用 Timing wheel 踢掉空闲连接 - 陈硕 - 博客园socket编程中read().write().recv()和send()的区别_John W ...

最新文章

  1. 如何测量情感和感觉(以及它们之间的区别)?
  2. mongodb配置windows服务启动
  3. 数据库操作错误:删除对于用户'root':数据库主体在该数据库中拥有架构,无法删除...
  4. 8.分布式数据库HBase第4部分
  5. VC\JS Base64转码
  6. 连表查询使用in_SQL 组合查询
  7. 超600人!近5小时直播!录屏+彩蛋+PPT…你要的都在这!
  8. 作一个真正合格的飞秋局域网聊天
  9. 为什么两个controller的session的id不一样_我,为什么会离婚?我为什么离婚?
  10. 语音识别准确率永远达不到100%?
  11. 12. JavaScript Number 对象
  12. photoshop标尺工具_RulersGuides.js – Web上的Photoshop样式标尺和指南
  13. Windows下卸载pip的方法
  14. 实现mac状态栏图标的隐藏
  15. 计算机文件夹加密文件,电脑文件夹怎么加密,制作隐私的加密文件夹软件
  16. 从壹开始前后端分离【重要】║最全的部署方案 最丰富的错误分析
  17. 她笔下的水墨世界令人赞叹,中国风海报沉浸式国风体验
  18. python生成中文字符画_在线汉字转为字符字,字符字生成器,在线生成字符字
  19. 【C++】C++顺序栈实现的计算器
  20. Sylvester不等式证明

热门文章

  1. [转]MySQL修改root密码的多种方法
  2. [jzoj 4528] [GDOI2019模拟2019.3.26] 要换换名字 (最大权闭合子图)
  3. 从零搭建 ES 搜索服务(六)相关性排序优化
  4. vs中debug和release版本的区别(转)
  5. 8.29 脏检查笔记
  6. IOS学习之路十(仿人人滑动菜单Slide-out Sidebar Menu)
  7. 概述Swing窗体的种类
  8. 编程语言-Python2-问题整理
  9. For ourselves
  10. QT分析之网络编程(七)