为什么socket编程中accept()中使用socklent_t *?

Sub*_*noy 3 c sockets networking

在 C 套接字编程中,accept()声明如下所示:

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
Run Code Online (Sandbox Code Playgroud)

sockfd我能理解,的用途struct sockaddr *addr

但为什么我们必须传递套接字长度的地址,本来可以的socklen_t。因为如果accept()函数需要长度,那么它可以通过 来获取socklen_t。为什么函数的原型要这样声明?

那么使用 type 的原因是什么socklen_t *

R..*_*R.. 5

在与它所接受的套接字的地址/协议系列无关的代码中,它可能使用通用sockaddr_storage结构来保存结果。所指向的初始值socklen_t就是该存储的大小;返回后的值accept是结果对等地址的实际大小。此外,某些地址/协议系列AF_UNIX具有可变长度地址,因此即使您知道类型,您也可能不知道大小。