c - 是否有检查名为 sptr 的 sockaddr* 是否指向 ipv4 或 ipv6 地址的函数?

标签 c sockets

是否有一个函数可以检查名为 sptrsockaddr * 是否指向 ipv4 或 ipv6 地址? 例如我有下面的代码,我如何添加它来获取地址是 ipv4 还是 ipv6,我可以使用 getaddrinfo() 吗?

struct sockaddr *sptr;
struct sockaddr_in *ipv4_ptr;

最佳答案

你可以测试sa_family成员:

switch (sptr->sa_family)
{
    case AF_INET:
    /* IPv4 */
    break;

    case AF_INET6:
    /* IPv6 */
    break;

    default:
    /* Something else */
}

如果sa_family成员是AF_INET,表示一个IPv4地址,套接字地址实际上是一个struct sockaddr_in *。如果 sa_family 成员是 AF_INET6,则表示一个 IPv6 地址,套接字地址实际上是一个 struct sockaddr_in6

关于c - 是否有检查名为 sptr 的 sockaddr* 是否指向 ipv4 或 ipv6 地址的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54527576/

相关文章:

c++ - 如何在另一个 png 之上绘制一个 png?

c - 使用 C 和 Visual Studio 2015 的 ANSI

c - sizeof(struct) 对于不同的编译器是不同的

Java Sockets——实时传输

java - Java 局域网游戏

c - 未声明的变量

networking - linux上套接字的连接超时是多少

c++ - 读取文件: How file pointer is moved using fscanf and how scanf/fscanf work with missing %type

Linux 上的 Python Socket 编程 - Errno 19 : No such device

c - 在阻塞连接后设置套接字非阻塞