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

标签 c linux sockets network-programming ip

我一直在阅读 sys/socket.h一整天终于开始理解它,现在开始使用它,但是,我不确定为什么我不能给 sockaddrsa_family 成员赋值> 结构。

规范sockaddr结构:

struct sockaddr{
    sa_family_t   sa_family       address family
    char          sa_data[]       socket address (variable-length data)
};

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

值(value)观:

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

简单测试:

#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;
}

错误:

“地址”的存储大小未知

它应该打印出 Socket Address Family: AF_INET...我在这里缺少什么?

最佳答案

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

关于c - sockaddr 结构 - (sys/socket.h),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32596553/

相关文章:

c - 如何在 C 中格式化表格

python - os.getlogin() 和 os.environ 获取用户名的区别

c - Linux:是否有超时的套接字读取或接收?

c# - 我将如何创建 Windows Phone Live Camera Feed?

php - 使用 php 从给定的 url 下载 apk 文件到服务器

java - 套接字数组

c - 在 C 中获取错误 "expected identifier or ' (' before ' {' token

c - 使用 char 和 num 扫描输入行

c - 数组段错误结束

linux - execve() 和 fork() 的源代码