我有一个绑定到0.0.0.0的UDP套接字。完成之后,如何知道接收数据包的确切网络接口?我尝试了getsockname,但它返回0.0.0.0。
答案 0 :(得分:0)
在How can I get to know the IP address for interfaces in C?有一个很好的代码示例。简而言之,是
#define MAX_INTERFACE_COUNT 10
struct ifconf ifc;
struct ifreq ifr[MAX_INTERFACE_COUNT];
ifc.ifc_len = sizeof(ifr);
ifc.ifc_ifcu.ifcu_buf = (caddr_t) ifr;
if (ioctl(sock, SIOCGIFCONF, &ifc)) {
printf("Error getting ifconf structure");
exit(-1);
}
int ifc_num = ifc.ifc_len / sizeof(struct ifreq);
printf("Bound to %d interfaces:\n", ifc_num);
for (int i = 0; i < ifc_num; ++i)
printf(" %d is '%s'\n", i+1, ifr[i].ifr_name);
我假设这里sock
是您的套接字句柄,并且您计算机上的网络接口(硬件和虚拟)不超过MAX_INTERFACE_COUNT
。