Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 我能找到正在处理我的套接字的网络接口/设备吗?_Sockets_Posix_Ioctl_Getsockopt - Fatal编程技术网

Sockets 我能找到正在处理我的套接字的网络接口/设备吗?

Sockets 我能找到正在处理我的套接字的网络接口/设备吗?,sockets,posix,ioctl,getsockopt,Sockets,Posix,Ioctl,Getsockopt,假设我从socket(2)中得到了一个文件描述符,并且我在上面做了一个connect(2)——以后有没有办法(从运行的程序内部)确定底层传输可能使用的网络设备?在fd上调用stat(2),设备编号为0;ioctl(2)或getsockopt(2)选项似乎都不适用。通过accept呼叫,您应该能够获得远程客户端的ip地址(见Beej的)。假设没有任何非对称路由,可以在本地路由表中查找到该地址的路由。路由表应该告诉您使用哪个以太网设备向远程客户端发送数据包 编辑: 您可以使用以下命令行工具查询具有远

假设我从
socket(2)
中得到了一个文件描述符,并且我在上面做了一个
connect(2)
——以后有没有办法(从运行的程序内部)确定底层传输可能使用的网络设备?在fd上调用
stat(2)
,设备编号为0;
ioctl(2)
getsockopt(2)
选项似乎都不适用。

通过
accept
呼叫,您应该能够获得远程客户端的ip地址(见Beej的)。假设没有任何非对称路由,可以在本地路由表中查找到该地址的路由。路由表应该告诉您使用哪个以太网设备向远程客户端发送数据包

编辑:

您可以使用以下命令行工具查询具有远程客户端地址的本地路由表:

ip route get <remote-client-ip-addr>
ip路由获取

没有万无一失的方法可以做到这一点——当然也没有兼容posix的方法


然而,在实践中,99%的时间都可以轻松确定接口。完成
connect
后,使用
getsockname
获取IP地址,然后在框中的可用接口列表中查找具有匹配IP地址的接口。

用于检索接口及其IP地址的列表。此外,在Linux 3.8+中,
getsockopt()
支持
SO\u BINDTODEVICE
选项,因此该选项还可以告诉您套接字绑定到哪个接口。