当我尝试绑定我的套接字时,我需要在addrinfo / sockaddr-structure中指定地址系列,我将其传递给bind()调用,否则将获得winsock错误10047(协议不支持地址族)家庭。)
如果我创建了一个不知道其地址族的套接字,该怎么办... 我怎么能得到那个套接字的地址族,所以我可以绑定它?
getsockname仅适用于绑定套接字:/ ...
我不想强迫我的函数调用者将地址族传递给我的函数,特别是如果她/他/它在创建她/他的套接字时使用AF_UNSPEC / PF_UNSPEC
(例如SOCKET sock = socket(AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP);
)
答案 0 :(得分:5)
由于我使用Winsock,我确实搜索了MSDN一段时间,并找到了WSADuplicateSocket。
WSAPROTOCOL_INFO proto;
WSADuplicateSocket(Socket, GetCurrentProcessId(), &proto);
SocketAF = proto.iAddressFamily;
适用于Windows机器......