确定未绑定套接字的地址族

时间:2011-07-11 07:13:19

标签: c++ sockets networking bind winsock

当我尝试绑定我的套接字时,我需要在addrinfo / sockaddr-structure中指定地址系列,我将其传递给bind()调用,否则将获得winsock错误10047(协议不支持地址族)家庭。)

如果我创建了一个不知道其地址族的套接字,该怎么办... 我怎么能得到那个套接字的地址族,所以我可以绑定它?

getsockname仅适用于绑定套接字:/ ...

我不想强迫我的函数调用者将地址族传递给我的函数,特别是如果她/他/它在创建她/他的套接字时使用AF_UNSPEC / PF_UNSPEC

(例如SOCKET sock = socket(AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP);

1 个答案:

答案 0 :(得分:5)

由于我使用Winsock,我确实搜索了MSDN一段时间,并找到了WSADuplicateSocket。

WSAPROTOCOL_INFO proto;
WSADuplicateSocket(Socket, GetCurrentProcessId(), &proto);
SocketAF = proto.iAddressFamily;

适用于Windows机器......