首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getsockopt设计问题

getsockopt设计问题
EN

Stack Overflow用户
提问于 2019-03-08 02:11:36
回答 2查看 51关注 0票数 0

我们可以看到api被定义为blow。

代码语言:javascript
复制
   int getsockopt(int sockfd, int level, int optname,
                  void *optval, socklen_t *optlen);

问题1:

  1. 假设给定一个级别和optname,那么我们知道optlen,为什么我们也需要用户提供optlen参数?
  2. 即使用户提供optlen,为什么它是指向socklen_t的指针而不是直接的socklen_t?实现是否会以某种方式改变optlen的值?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-08 07:46:32

您看过getsockopt(2)的Linux手册页或getsockopt()的POSIX规范吗?

  1. optlen参数是一个输入输出参数。在输入时,它指定optval空间中可用的空间,在输出时,它报告optval中有多少空间被写入。
  2. 是的,实现改变了*optlen的值。

例如,POSIX说:

如果选项值的大小大于option_len,则option_value参数指向的对象中存储的值将被静默截断。否则,将修改option_len参数所指向的对象,以指示值的实际长度。

规范在使用optlen的地方使用optlen,在使用optval的地方使用option_value

票数 0
EN

Stack Overflow用户

发布于 2019-03-08 06:28:45

understand.Because api很容易面对许多选项,并且需要为未来的选项做准备。

示例:

假设"optname=1“,它将返回64字节字符串。此时,您需要:

炭疽病( char Optval64);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55055760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档