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

发布于 2024-11-19 18:31:13 字数 352 浏览 0 评论 0原文

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

如果我在其他地方创建了一个不知道其地址族的套接字怎么办? 我怎样才能获得该套接字的地址族,以便我可以绑定它?

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

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

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

When I try to bind my socket I need to specify the address family in the addrinfo/sockaddr-structure I pass in to the call to bind(), or one will get an winsock error 10047 (Address family not supported by protocol family.)

What if I created a socket elswhere not knowing its address family...
How could I get the address family for that socket, so i can bind it?

getsockname only works for bound sockets :/...

I don´t want to force the caller of my function to pass the address family to my functions, especially if she/he/it uses AF_UNSPEC/PF_UNSPEC when creating her/his socket

(e.g. SOCKET sock = socket(AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP); )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深者入戏 2024-11-26 18:31:13

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

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

适用于 Windows 机器...

Since I am using Winsock I did search the MSDN for a short while and found WSADuplicateSocket.

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

Works fine for windows machines...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文