【问题标题】:Why is the address length argument is pointer in the function accept() and recv()?为什么地址长度参数是函数accept()和recv()中的指针?
【发布时间】:2018-04-11 04:07:11
【问题描述】:
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

我不明白为什么 addrlen 参数是指针,而不是 socklen_t

【问题讨论】:

  • 是为了能够回长度。它是一个输入/输出参数:“addrlen 参数是一个值结果参数:调用者必须将其初始化为包含 addr 指向的结构的大小(以字节为单位);返回时它将包含对等方的实际大小地址。”
  • 如上。这是相当常见的,需要提供你传入的结构的大小,以及传递回使用的元素数量的函数
  • 你能澄清你的问题吗:你说你不明白为什么addrlen是一个指针,而不是socklen_t。第一部分是有道理的,但我不明白你对socklen_t 的意思

标签: c++ c sockets socklen-t


【解决方案1】:

那是因为它是一个输入/输出参数,在 C 接口函数中,您别无选择,只能在变量上传递一个指针,以便在需要时由被调用者更改。

来自man pages

addrlen 参数是一个值结果参数:调用者必须初始化它以包含 addr 指向的结构的大小(以字节为单位);返回时它将包含对等地址的实际大小。”

如您所见,即使您指定了尺寸,系统也会返回实际尺寸(可能与您指定的不同)

同样适用于这种情况:

当 addr 为 NULL 时, 什么都没有填写;在这种情况下,不使用 addrlen,并且应该 也为NULL。

在这里,如果没有使用,为什么要传递一个值?

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 2012-03-22
    • 2014-06-30
    相关资源
    最近更新 更多