2011-07-11 52 views
1

當我嘗試綁定套接字時,我需要指定地址系列,我將它傳遞給調用bind()的addrinfo/sockaddr-structure,否則將獲得winsock錯誤10047 (地址家族不支持協議族)確定未綁定套接字的地址系列

如果我在不知道地址族的地方創建了一個套接字... 如何獲取該套接字的地址族,以便我可以綁定它?

getsockname僅適用於綁定插座:/ ...

我不希望強制我函數的調用的地址族傳遞給我的功能,特別是如果他/她/它使用AF_UNSPEC/PF_UNSPEC創造她的時候,他/插座

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

+0

找到了答案......會盡快發佈它作爲即時通訊能夠... – Incubbus

回答

5

由於我使用的Winsock我做搜索MSDN一會兒,發現WSADuplicateSocket。

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

工作正常的Windows機器...

+3

還與SO_PROTOCOL_INFO的getsockopt可用於檢索相同的信息。 – Ation