首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sockaddr结构- (sys/socket.h)

sockaddr结构- (sys/socket.h)
EN

Stack Overflow用户
提问于 2015-09-16 06:13:12
回答 1查看 25.1K关注 0票数 4

我已经阅读了sys/socket.h一整天,终于开始理解它了,现在开始使用它了,然而,我不确定为什么我不能给sockaddr结构的sa_family成员赋值。

规范sockaddr结构:

代码语言:javascript
复制
struct sockaddr{
    sa_family_t   sa_family       address family
    char          sa_data[]       socket address (variable-length data)
};

数据类型:sa_family_t -无符号整型(2-4字节)

值:

代码语言:javascript
复制
Name                Purpose                          Man page
       AF_UNIX, AF_LOCAL   Local communication              unix(7)
       AF_INET             IPv4 Internet protocols          ip(7)
       AF_INET6            IPv6 Internet protocols          ipv6(7)
       AF_IPX              IPX - Novell protocols
       AF_NETLINK          Kernel user interface device     netlink(7)
       AF_X25              ITU-T X.25 / ISO-8208 protocol   x25(7)
       AF_AX25             Amateur radio AX.25 protocol
       AF_ATMPVC           Access to raw ATM PVCs
       AF_APPLETALK        AppleTalk                        ddp(7)
       AF_PACKET           Low level packet interface       packet(7)
       AF_ALG              Interface to kernel crypto API

这有点令人困惑,因为这些值是char数据类型,而不是unsigned int

简单测试:

代码语言:javascript
复制
#include<stdio.h>
#include<sys/socket.h> 

int main(void){
    struct sockaddr_in address;
    address.sin_family = AF_INET;
    printf("Socket Address Family: %s\n", address.sin_family);
    return 0;
}

错误:

storage size of ‘address’ isn’t known

它应该打印出Socket Address Family: AF_INET...这里我漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-16 06:26:41

这是因为您没有包含该结构的定义。在<netinet/in.h>中定义了结构sockaddr_in。有关更多详细信息,请参阅:sockaddr_in undeclared identifier

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32596553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档