网络编程中为什么使用“值-结果”参数

首先了解什么是“值-结果”参数,假设有如下代码

struct sockaddr_un cli;
int len;
len = sizeof(cli);

// unixfd 和 SA 在此不需要注意
getpeername(unixfd, (SA *)&cli, &len); 

getpeername 声明:int sockfd, struct sockaddr *addr, socklen_t
*addrlen;
它是指一个函数的入参 len 虽然是地址类型,但它同样会作为输出参数被更改值。原因在于 c 函数只能有一个返回值,示例代码中的 getpeername 已经有一个返回值了(int)。

网络编程中,值-结果参数最常见的例子就是所反害己套接字地址结构的长度,比如示例中 len,因为有些地址结构长度是可变的,比如 sockaddr_un,内核实际写入的长度不一定的该地址结构的最大长度,很有可能会小于该长度,因此需要一个参数返回实际写入的长度值。这种情况便由值-结果参数解决。

猜你喜欢

转载自blog.csdn.net/chuanglan/article/details/80679709