【发布时间】:2016-08-18 15:09:44
【问题描述】:
当我从绑定到 INADDR_ANY 的 UDP 套接字发送数据包时,如何找出操作系统选择使用的 IP 地址?
int s = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in src;
src.sin_family = AF_INET;
src.sin_port = 12345;
src.sin_addr.s_addr = INADDR_ANY;
bind(s, (struct sockaddr*)&src, sizeof(src));
char msg[] = "Hello";
sockaddr_in dest;
dest.sin_family = AF_INET;
dest.sin_port = 12345;
dest.sin_addr.s_addr = (in_addr_t)0xdeadbeef;
sendto(s, msg, sizeof(msg), 0, (struct sockaddr*)&dest, sizeof(dest));
使用什么源地址发送数据包?理想情况下会有一个sendtofrom() 函数,如recvfrom(),它返回内核选择的地址。
在我的应用程序中,我绑定到 INADDR_ANY 并向 STUN 服务器发送一个数据包(我不想使用路由表来选择源地址:内核的选择很好)。但是,要执行 ICE,我需要获取“服务器自反地址”的“基地址”,即。我需要知道使用哪个本地地址发送 STUN 请求。我会接受 Windows 或 POSIX 特定的答案,建议从路由表中查找地址。
【问题讨论】:
-
看看这是否有用 - stackoverflow.com/questions/3060950/…
-
@Prahu,不是真的,对不起。这根本不是同一个问题......
标签: sockets winapi routing udp posix