如何确定套接字句柄是 ipv4 还是 ipv6?

how to determine if a socket handle is ipv4 or ipv6?

给定一个套接字句柄,有什么方法可以确定它是 AF_INET 还是 AF_INET6,例如创建套接字的第一个参数(https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket)?我正在 Windows.

编程

getsockopt函数:

int getsockopt(
  [in]      SOCKET s,
  [in]      int    level,
  [in]      int    optname,
  [out]     char   *optval,
  [in, out] int    *optlen
);

如果optname参数是SO_PROTOCOL_INFO,缓冲区应该包含WSAPROTOCOL_INFO结构。它的 iAddressFamily 成员将是 AF_INETAF_INET6

getsockopt function (winsock.h)

WSAPROTOCOL_INFOA structure (winsock2.h)