【发布时间】:2021-12-24 15:25:13
【问题描述】:
根据this answer,调用connect时如果指定了目的地址,系统会自动选择socket要使用的接口。我正在寻找的是一种在使用 C 或 C++ 调用 connect 之前知道该接口名称的简单方法。我知道这可以通过命令route get to $ADDR 来完成,但是在程序中调用外部命令似乎有点脏。除了解析路由表或调用route之外,在C/C++中有没有其他方法可以做到这一点?
【问题讨论】:
-
好吧,既然Linux是开源的,想必大家可以看看
route的源代码,看看它做了什么,自己也做同样的事情吧? -
路由表中的内容决定了使用哪个接口。匹配最长的路线获胜,平局使用度量最低的并列路线。默认路由 (
0.0.0.0/0) 匹配所有内容,但它是最短匹配 (0长度),因此仅在没有其他匹配时使用。 -
我不认为有内置的API可以做到这一点,所以你必须自己处理路由表。
标签: c++ linux sockets networking