我们可以看到api被定义为打击
int getsockopt(int sockfd,int level,int optname, void * optval,socklen_t * optlen);问题1:假设给出一个级别和optname,那么……
你看过Linux手册吗? getsockopt(2) 或者POSIX规范 getsockopt() ?
getsockopt(2)
getsockopt()
该 optlen 参数是输入输出参数。在输入时,它指定可用空间 optval 空间和输出,它报告了多少空间 optval 被写入。
optlen
optval
是的,实现改变了它的价值 *optlen 。
*optlen
例如,POSIX说:
如果选项值的大小大于 option_len ,存储在指向的对象中的值 请将option_value 参数应该被默默地截断。否则,指向的对象 option_len 应修改参数以指示值的实际长度。
规范使用 option_len 你用过的地方 optlen ,和 option_value 你用过的地方 optval 。
option_len
option_value
这很容易理解。因为api面临很多选择,需要为未来的选择做好准备。
例:
假设“optname = 1”,它将返回64bytes字符串。这时,你需要:
char optval [64]; socklen_t optlen = 64;