C 语言中 sendto() 和 recvfrom() 形式参数的区别
Formal Parameters difference between sendto() and recvfrom() in C
我正在使用 recvfrom()
and sendto()
接收和发送 UDP 数据包。
我注意到 recvfrom()
作为最后一个参数需要 指向变量的指针 存储服务器地址的长度,而 sendto()
需要 存储客户端地址长度的变量。
为什么会有这种差异?
I have noticed that recvfrom() as last parameter requires a pointer to
the variable storing the length of server address while sendto()
requires the variable that stores the length of the client address.
你实际上是在回答你自己的问题
recvfrom() as last parameter requires a pointer to
the variable storing the length of server address.
while sendto() requires the variable that stores
the length of the client address.
recvfrom()
需要指针,因为它将值存储到该指针指向的位置。由于在 c
中没有所谓的引用调用,因此您需要传递指针来模拟引用调用行为。
由于 UDP 不是基于连接的(没有 connect(sd, ...)
调用,您在其中说:从现在开始,与套接字描述符 sd
相关的所有数据都将来自众所周知的 IP 端口对),每当您发出 recvfrom()
时,它都会(尝试)return 您输入数据来源的地址。
将地址写入src_addr缓冲区,如果不为NULL。此缓冲区由调用者提供,其大小必须在设置 addr_len 参数中指定。它是指针传递的,因为recvfrom()
,用它来限制写入src_addr的数据量后,会用实际覆盖它 地址长度。我们可以说addr_len是一个输入输出参数。
另一方面,sendto()
的调用者会确切地知道目标地址,所以addr_len在这种情况下是按值传递的,因为是一个仅供输入的参数。
您在问题中链接的指南中清楚地解释了此信息。
我正在使用 recvfrom()
and sendto()
接收和发送 UDP 数据包。
我注意到 recvfrom()
作为最后一个参数需要 指向变量的指针 存储服务器地址的长度,而 sendto()
需要 存储客户端地址长度的变量。
为什么会有这种差异?
I have noticed that recvfrom() as last parameter requires a pointer to the variable storing the length of server address while sendto() requires the variable that stores the length of the client address.
你实际上是在回答你自己的问题
recvfrom() as last parameter requires a pointer to
the variable storing the length of server address.
while sendto() requires the variable that stores
the length of the client address.
recvfrom()
需要指针,因为它将值存储到该指针指向的位置。由于在 c
中没有所谓的引用调用,因此您需要传递指针来模拟引用调用行为。
由于 UDP 不是基于连接的(没有 connect(sd, ...)
调用,您在其中说:从现在开始,与套接字描述符 sd
相关的所有数据都将来自众所周知的 IP 端口对),每当您发出 recvfrom()
时,它都会(尝试)return 您输入数据来源的地址。
将地址写入src_addr缓冲区,如果不为NULL。此缓冲区由调用者提供,其大小必须在设置 addr_len 参数中指定。它是指针传递的,因为recvfrom()
,用它来限制写入src_addr的数据量后,会用实际覆盖它 地址长度。我们可以说addr_len是一个输入输出参数。
另一方面,sendto()
的调用者会确切地知道目标地址,所以addr_len在这种情况下是按值传递的,因为是一个仅供输入的参数。
您在问题中链接的指南中清楚地解释了此信息。