什么是sa_family_t

Joh*_*ish 4 c++ sockets types identifier

我正在关注Beej的网络编程指南,我正在使用VC++ 2010,但是当我将结构粘贴到我的程序中时,一些类型会出现错误的标识符.例如:

u_int32_t就这样,经过一番搜索,我发现那些是1999年左右的C语言中的旧类型.我本来可以包含stdint.h,但这需要我记住它们的含义.相反,我使用的标准int是32位长(4字节),而对于其他64位长(8字节)的标准,我使用了long long int.

无论如何,我正在缩小到我的上一个语法错误,它说sa_family_t是一个无效的标识符.我不知道它应该是什么,搜索没有任何结果.这是我的问题,我不知道我应该为那个类型标识符指定什么.

这困扰着我的另一件事是这样的: char __ss_pad1[_SS_PAD1SIZE];SS_PAD1SIZE事情红色出现为无效了.

Car*_*ory 7

sa_family_t应该是无符号整数. Windows标头文件不符合该标准.Winsock.h定义sockaddr结构如下:

struct sockaddr {
        u_short sa_family;              /* address family */
        char    sa_data[14];            /* up to 14 bytes of direct address */
};
Run Code Online (Sandbox Code Playgroud)

因此,要编译代码,您需要自己输入dede sa_family_t.

  • Linux 还将 `sa_family_t` 定义为 `unsigned Short`。我不知道说 Windows 不符合这里的规范是否公平。我对规范的解读是任何无符号整数类型都是允许的。 (2认同)