假设我有一个来自socket(2)
的文件描述符并且我已经对其进行了connect(2)
- 是否有任何方法可以稍后确定(从正在运行的程序中)可能是什么网络设备用于底层运输?在fd上调用stat(2)
会给出设备编号0; ioctl(2)
或getsockopt(2)
选项似乎都不适用。
答案 0 :(得分:1)
There's no foolproof way to do so -- certainly not a posix-compliant way.
However, in practice, you can easily determine the interface 99% of the time. After you've done the connect
, use getsockname
to obtain the IP address, then look through the list of available interfaces on the box for one with a matching IP address.
答案 1 :(得分:0)
在accept
电话中,您应该可以获取远程客户端的IP地址(在Beej上看到here)。假设您没有任何非对称路由,则可以在本地路由表中查找到该地址的路由。路由表应该告诉您使用什么以太网设备将数据包发送到远程客户端。
编辑:
您可以使用以下命令行工具使用远程客户端的地址查询本地路由表:
ip route get <remote-client-ip-addr>