30定义的套接字地址系列是什么?

时间:2019-03-28 19:14:12

标签: c ftp network-programming constants ftp-server

我正在用C语言编写一个简单的FTP服务器程序。我主要遵循Beej的网络编程指南。为了完成pasv模式的功能,我必须创建另一个套接字并将其ip和端口发送给客户端。

由于不赞成使用gethostbyname(),因此我正在使用getsockname()来获取当前的网络IP地址。我的计划是将两种情况(ipv4和ipv6)分开,并相应地将信息发送给客户端。但是,每当我尝试获取地址族时,它总是30。但是我不确定是否正确打印了该地址族。

我正在做类似这样的简单操作(可能包含错误),它显示30。

struct sockaddr_storage my_addr;
int result;
socklen_t len = sizeof(my_addr);

result = getsockname(current_fd, (struct sockaddr *) &my_addr, &len);

if (my_addr.ss_family == AF_INET) { // ipv4
        struct sockaddr_in * ipv4 = (struct sockaddr_in *) &my_addr;
        addr = &(ipv4->sin_addr);
} else { // ipv6
        struct sockaddr_in6 * ipv6 = (struct sockaddr_in6 *) &my_addr;
        addr = &(ipv6->sin6_addr);
}

printf(" family: %u\n", (unsigned short) my_addr.ss_family);

当我在线搜索时,我得到了:

#define AF_ATM 30 /* ATM */

这到底是什么?这是预期的吗?如果没有,我在哪里做错了?

谢谢。

编辑:

显然,它所打印的内容有所不同。

它没有定义为: #define AF_ATM 30 /* ATM */ 但是它定义为: MT IPv6: Multi-Topology IP version 6 [RFC7307]

0 个答案:

没有答案