- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个为 linux (ubuntu 16.04) 运行的旧代码,它绑定(bind)到一个套接字并设置 SO_BINDTODEVICE,
setsockopt(sout, SOL_SOCKET, SO_BINDTODEVICE,"enp4s0", 4);
我已将目标更改为新的 Ubuntu 17.10,但它失败并显示错误“没有这样的设备”,我已经使用环回“lo”接口(interface)在此目标中进行了测试,它可以正常工作。
接口(interface)启用了多播标志
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0a:cd:21:ac:2a brd ff:ff:ff:ff:ff:ff
3: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 30:9c:23:1c:b9:08 brd ff:ff:ff:ff:ff:ff
4: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 30:9c:23:1c:b9:09 brd ff:ff:ff:ff:ff:ff
22: macvtap0@enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 500
link/ether 52:54:00:e4:5a:f8 brd ff:ff:ff:ff:ff:ff
23: macvtap1@enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 500
link/ether 52:54:00:a0:93:d0 brd ff:ff:ff:ff:ff:ff
它在除 lo 之外的所有接口(interface)中都失败。
我怀疑设备名称的长度,所以我在 17.04 中进行了测试,名称“eno0”有效,但 wlp5s0 (wifi) 无效。
不知道怎么解决。你?长度有限制吗?
最佳答案
它不适用于较长的名称长度,因为您传递的长度错误。
setsockopt
的最后一个参数指定作为第四个参数传递的选项值的长度。您为此选项传递的值为 4,因此只会查看字符串的前 4 个字节。
将最后一个参数更改为字符串的长度:
setsockopt(sout, SOL_SOCKET, SO_BINDTODEVICE,"enp4s0", strlen("enp4s0"));
关于无法为 enp4s0 上的套接字设置 SO_BINDTODEVICE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729929/
我有一个为 linux (ubuntu 16.04) 运行的旧代码,它绑定(bind)到一个套接字并设置 SO_BINDTODEVICE, setsockopt(sout, SOL_SOCKET, S
我的 PC 有两个网卡。一个 (eth0) 用于 LAN/internet,另一个用于与一个微 Controller 设备进行 UDP 通信。微 Controller 有一个 IP (192.168.
我正在尝试运行 PTPDV2(精确定时协议(protocol))服务器,该服务器绑定(bind)在用于设置多播的接口(interface)上。 我有一个如下的虚拟接口(interface) eth
Linux 允许执行以下代码将套接字绑定(bind)到某个特定的网络接口(interface)。因此,通过此套接字发送的数据将始终通过原始接口(interface)传输。 setsockopt(soc
我正在实现基于原始套接字的代码。为了接收即将到来的以太网帧,我必须将我创建的套接字绑定(bind)到以太网接口(interface)。就我而言,唯一的方法是通过带有选项 SO_BINDTODEVICE
我有以下简单的测试程序来创建一个 UDP 套接字并使用 SO_BINDTODEVICE 将它绑定(bind)到一个特定的接口(interface),这样我就可以 bind() 它所以 INADDR_A
我有这个负责处理数据包的c可执行文件。我正在尝试使用 setsockopt 将接口(interface)绑定(bind)到我的套接字 sockfd #define MULTICAST #include
我正在尝试在具有两个接口(interface)的系统上设置套接字的输出接口(interface)。我在谷歌上搜索了很多,但发现了不同的答案。有人说我可以在调用 connect 以选择特定接口(inte
我在 linux (ubuntu 13.10) 上运行一个项目,它使用连接到设备的原始套接字。 这是我的代码: /* builed socket */ if ((sockfd = socket(PF_
我正在尝试使用 SO_BINDTODEVICE 将我的套接字绑定(bind)到 eth0。我将 eth0 传递给变量 opt。我的套接字名称是 socketfd sockfd = socket
问题背景: 在我们的机器上,我们有多个网络接口(interface)导致不同的网络。可能存在重叠的 IP 地址(例如,两个不同网络中的两台不同机器具有相同的 IP 地址)。因此,当我们想要与特定的对等
以非 root 用户身份运行此命令: curl --interface tun0 http://google.com -v SO_BINDTODEVICE tun0 failed with errno
我希望能够通过特定的网络接口(interface)强制套接字。在 Linux 中,内核允许程序员通过设置上述套接字选项来实现此目的 - 但在 OS X 中,我一无所知。 因此我的标题问题 - 这可能吗
我正在尝试将我的计算机连接到 NAT 的两端(由 OpenWRT 运行)并通过 NAT 建立 TCP 连接: 我在我的第一个 NIC(eth0,ip 地址 129.104.0.1)上运行一个 DHCP
这大概是一件很简单的事情。我是 python 的新手,所以不要把我钉在十字架上。 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.set
我是一名优秀的程序员,十分优秀!