C++ Linux 使用 char[14] 绑定(bind)套接字

标签 c++ linux sockets

我对 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/

相关文章:

c++ - 从C语言文件中提取单词

C++:无法在使用条件类型的模板函数中使用类型为 'char*' 的左值初始化类型为 'double' 的参数

linux - 手动虚拟地址转换

c - 使用 packet_mmap 发送任意以太网帧但无法设置环

java - c++中具有相同名称的局部变量和形式参数?

C++11:保证来自模板参数的非转换引用

python - 为什么在并行写入文件时看不到交错行?

linux - Fedora 17 的 PATH 变量中缺少 GCC

python - IOS smallSocket 和 python

python-3.x - 如何在 Windows 8.1 的 anaconda(python3.6) 中构建 cython pyx 到 pyd?