Jor*_*vis 6 c sockets linux ip network-programming
我一整天都在阅读sys/socket.h并终于开始理解它,现在开始使用它,但是,我不确定为什么我不能为sa_family结构成员赋值sockaddr。
规格sockaddr结构:
struct sockaddr{\n sa_family_t sa_family address family\n char sa_data[] socket address (variable-length data)\n};\nRun Code Online (Sandbox Code Playgroud)\n\n数据类型: sa_family_t- 无符号整型(2-4 字节)
价值观:
\n\nName Purpose Man page\n AF_UNIX, AF_LOCAL Local communication unix(7)\n AF_INET IPv4 Internet protocols ip(7)\n AF_INET6 IPv6 Internet protocols ipv6(7)\n AF_IPX IPX - Novell protocols\n AF_NETLINK Kernel user interface device netlink(7)\n AF_X25 ITU-T X.25 / ISO-8208 protocol x25(7)\n AF_AX25 Amateur radio AX.25 protocol\n AF_ATMPVC Access to raw ATM PVCs\n AF_APPLETALK AppleTalk ddp(7)\n AF_PACKET Low level packet interface packet(7)\n AF_ALG Interface to kernel crypto API\nRun Code Online (Sandbox Code Playgroud)\n\n这有点令人困惑,因为这些值是char数据类型而不是unsigned int.
简单测试:
\n\n#include<stdio.h>\n#include<sys/socket.h> \n\nint main(void){\n struct sockaddr_in address;\n address.sin_family = AF_INET;\n printf("Socket Address Family: %s\\n", address.sin_family);\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n错误:
\n\nstorage size of \xe2\x80\x98address\xe2\x80\x99 isn\xe2\x80\x99t known
它应该打印出来Socket Address Family: AF_INET......我在这里错过了什么?
这是因为您没有包含该结构的定义。该结构sockaddr_in定义在<netinet/in.h>. 更多详情请参见:sockaddr_in 未声明的标识符
| 归档时间: |
|
| 查看次数: |
41894 次 |
| 最近记录: |