Определить семейство адресов несвязанного сокета - PullRequest
1 голос
/ 11 июля 2011

Когда я пытаюсь связать свой сокет, мне нужно указать семейство адресов в addrinfo / sockaddr-структуре, которую я передаю в вызов функции bind (), иначе получится ошибка winsock 10047 (семейство адресов не поддерживается протоколом семья.)

Что если бы я создал сокет, не зная его семейства адресов ... Как я могу получить семейство адресов для этого сокета, чтобы я мог связать его?

getsockname работает только для связанных сокетов: /...

Я не хочу, чтобы вызывающая сторона моей функции передавала семейство адресов моим функциям, особенно если она / он / она использует AF_UNSPEC / PF_UNSPEC при создании своего сокета

(например, SOCKET sock = socket(AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP);)

1 Ответ

5 голосов
/ 11 июля 2011

Так как я использую Winsock, я некоторое время искал MSDN и нашел WSADuplicateSocket.

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

Прекрасно работает для машин Windows ...

...