我对 C++ 很陌生,所以这个问题绝对是愚蠢的。
在linux套接字编程文档中,我发现了这个:
struct sockaddr { a_family_t sa_family; char sa_data[14]; };
但是,当我写 sockaddr address = {AF_INET, strAddress};
GCC 返回错误:
array must be initialized with a brace-enclosed initializer
我不明白的是,如果我写
sockaddr address = {AF_INET, "AN_AARRAY_OF_CHAR"};
,它可以工作并且不会返回错误。
所以,
"THIS ARRAY"
和 char test[]="THIS ARRAY"
之间有什么区别?
如何解决它返回给我的错误?
最佳答案
sockaddr
是任何类型套接字操作的通用描述符。 char sa_data[14]
只是特定于系列的数据的占位符。您根本不应该直接使用 sockaddr
。
每个套接字地址族都有自己特定的 sockaddr_...
结构类型。
对于 AF_INET
地址族,您必须使用 sockaddr_in
,这是一种特定于基于 IPv4 的通信的结构。
对于 AF_INET6
地址族,您必须使用 sockaddr_in6
,这是一种特定于基于 IPv6 的通信的结构。
等等。
您必须为正在使用的地址族使用适当的 sockaddr_...
结构,并在将其地址传递给采用通用 sockaddr*
参数的套接字函数时将其地址转换为 sockaddr*
。
关于C++ Linux 使用 char[14] 绑定(bind)套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54028575/