【发布时间】:2014-06-10 16:11:41
【问题描述】:
在一个多平台项目中,我使用 pcap 来获取所有网络接口的列表,打开每个(用户无法选择要使用的接口)并在每个上发送/接收数据包(以太网类型 0x88e1/HomePlugAV)。这在 Windows 和 Mac OS X 上运行良好,但有时在 Mac OS X 上pcap_sendpacket 在networksetup -listallhardwareports 列为“硬件端口:Thunderbolt 1”的接口上一段时间后会失败。错误是:
发送:没有可用的缓冲区空间
在机器启动后运行程序时,需要一些时间才能发生错误。当错误发生一次并且我停止我的程序时,当我重新启动我的程序而不重新启动机器时会立即发生错误。
ifconfig -v en9:
en9: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 index 8
eflags=80<TXSTART>
options=60<TSO4,TSO6>
ether b2:00:1e:94:9b:c1
media: autoselect <full-duplex>
status: inactive
type: Ethernet
scheduler: QFQ
networksetup -listallhardwareports(仅相关部分):
Hardware Port: Thunderbolt 1
Device: en9
Ethernet Address: b2:00:1e:94:9b:c1
测试表明,在 OS X 10.9 上,界面最初并未启动,但在 OS X 10.9.2 和 10.9.3 上,界面在启动后启动并运行。
在 OS X 10.9 ifconfig 最初说:
en5: flags=8822<BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 1500 index 8
ifconfig en5 up 之后的问题行为在 OS X 10.9 上是相同的。
- 为什么
pcap_sendpacket在 Thunderbolt 适配器上失败? - 我的程序如何在打开之前检测到这是一个令人不安的界面?我知道我可以打开接口并尝试发送一个数据包,但我更愿意事先进行干净检测。
【问题讨论】:
-
ifconfig en9在重启后打印什么(以及在关闭它之前?)。我在这里尝试将 Thunderbolt-to-Ethernet 适配器插入 Mavericks 机器,它创建了有问题的接口(编号不同),但“Thunderbolt 1”和“Thunderbolt 2”接口没有启动。 -
@GuyHarris 我已将
ifconfig -v en9的输出添加到我的问题中。您可能已经注意到,我还更新了我的问题:如果从未连接过 Thunderbolt 以太网适配器,问题也会存在。
标签: macos osx-mavericks pcap libpcap