将套接字绑定到0.0.0.0之后如何获取套接字的网络接口

时间:2020-07-16 18:11:52

标签: c sockets networking

我有一个绑定到0.0.0.0的UDP套接字。完成之后,如何知道接收数据包的确切网络接口?我尝试了getsockname,但它返回0.0.0.0。

1 个答案:

答案 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