接受函数的地址大小长度,以 <sys/socket.h 为单位>
The address size length of the accept function in <sys/socket.h>
在"sys/socket.h"中定义了函数:
int accept (int socket, struct sockaddr *address, socklen_t *address_len);
我的问题与socklen_t*address_len有关,它根据手册指向socklen_t,在输入时指定提供的sockaddr结构的长度,在输出时指定存储地址的长度。
在什么条件下,address_len大小的输入与输出不同?
我需要它,这样我就可以在我为sockaddr_in结构创建的包装器上模拟测试用例。
非常感谢!
它永远不会更大(输入长度是防止溢出的界限),但对于某些套接字类型,它可能会更小,例如地址本质上是路径名的unix域套接字。对于IP(v4或v6)套接字,它将始终是相应的sockaddr_in
或sockaddr_in6
结构的标称大小。
还要注意的是,在不知道所涉及的地址/协议族类型的情况下,可以使用类似的一些接口。例如,您可能有一个函数作为库代码的一部分,它接受未知类型的套接字,并使用sockaddr_storage
结构对其调用accept。它可能会找到IPv4地址和IPv6地址,或者完全是其他地址,这取决于调用者的操作。
这种用法对于accept
来说相当不典型,但对于使用相同接口样式的getpeername
来说更可能。事实上,所有从inetd
运行并希望知道远程地址的守护进程都必须这样操作。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 在 C/C++ 中打开驻留在 "/sys/" 下的文件时出错
- macOS 致命错误:sys/_types/_int8_t.h:没有此类文件或目录 #include < sys/_types/_int8_t.h>
- 如何在 sys/select.h 中正确使用
- 代码::块C++使用 MacOS 编译 Mojave : 致命错误: sys/cdefs.h: 没有这样的文件或目录
- 如何强制嵌入式python使用与命令行相同的sys.path?
- 如何显式调用运算符<<
- pybind11将python sys.stdout从print()重定向到c++
- 如何在运行时对程序创建的.sys文件设置文件版本
- 为什么 sys 套接字 recv 函数不填充数据但返回字节长度?
- C++:<sys/sysctl.h> 无法声明函数CTL_HW和HW_NCPU
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- 为什么我可以在不链接任何额外库的情况下包含 sys/*.h
- 我可以在不包含 <sys/socket.h> 的情况下使用 C 套接字吗?