1

当我尝试绑定我的套接字时,我需要在 addrinfo/sockaddr 结构中指定地址族,我将其传递给对 bind() 的调用,否则会收到 winsock 错误 10047(协议族不支持地址族。)

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

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

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

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

4

1 回答 1

5

由于我使用的是 Winsock,我确实在 MSDN 上搜索了一会儿,发现了 WSADuplicateSocket。

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

适用于Windows机器...

于 2011-07-11T11:33:06.950 回答