我使用的是Beej's Guide to Network Programming,我使用的是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
也以红色显示为无效。
2条答案
按热度按时间nvbavucw1#
sa_family_t should be an unsigned integer. Windows头文件不符合该标准。Winsock.h定义sockaddr结构如下:
因此,要编译代码,您需要自己键入def sa_family_t。
x8diyxa72#
如果有人得到了这个答案,并在Linux下寻找
sa_family_t;
,它在这里定义:https://github.com/torvalds/linux/blob/1a5304fecee523060f26e2778d9d8e33c0562df3/include/linux/socket.h#L28
__kernel_sa_family_t
的定义如下:https://github.com/torvalds/linux/blob/1a5304fecee523060f26e2778d9d8e33c0562df3/include/uapi/linux/socket.h#L10
所以最终,
sa_family_t
是unsigned short
,即2个字节。这使得整个struct sockaddr
达到了16个字节: