OSError 105:无缓冲空间 - Zeroconf

时间:2017-10-13 09:54:35

标签: python yocto zeroconf

我使用NanoPi M1(Allwinner H3板)&运行基于Yocto的操作系统。在我第一次遇到ZeroConf-python时,

>>> from zeroconf import Zeroconf, ServiceBrowser
>>> zero = Zeroconf()

我收到错误:

File "/usr/lib/python3.5/site-packages/zeroconf.py", line 1523, in __init__
    socket.inet_aton(_MDNS_ADDR) + socket.inet_aton(i))
OSError: [Errno 105] No buffer space available

当我在Raspbian(在RPI上)运行它时,不会出现此错误。 我已经尝试在homeassistant中搜索此类错误的修复程序,但没有一个能够提供对真实问题的良好概述,不考虑解决方案。

2 个答案:

答案 0 :(得分:1)

除了Neelotpal的答案:

post包含一个不错的解决方案建议,其中包含用于检查此问题的所有选项:

# Bigger buffers (to make 40Gb more practical). These are maximums, but the     default is unaffected.
net.core.wmem_max=268435456
net.core.rmem_max=268435456
net.core.netdev_max_backlog=10000

# Avoids problems with multicast traffic arriving on non-default interfaces
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

# Force IGMP v2 (required by CBF switch)
net.ipv4.conf.all.force_igmp_version=2
net.ipv4.conf.default.force_igmp_version=2

# Increase the ARP cache table
net.ipv4.neigh.default.gc_thresh3=4096
net.ipv4.neigh.default.gc_thresh2=2048
net.ipv4.neigh.default.gc_thresh1=1024

# Increase number of multicast groups permitted
net.ipv4.igmp_max_memberships=1024

我不建议盲目复制这些值,而是系统地测试限制您资源的是哪个值:

  1. 使用sysctl <property>获取当前设置的值
  2. 通过检查系统统计信息来验证该属性当前是否处于极限状态
  3. 按照Neelotpal的描述sysctl -w更改配置,或者直接更改/etc/sysctl.conf并通过sysctl -p重新加载

就我而言,增加net.ipv4.igmp_max_memberships可以达到目的:

  1. 我用sysctl net.ipv4.igmp_max_memberships检查了当前值为20
  2. 我用netstat -gn检查了多少成员身份,意识到我的大量Docker容器占据了其中的大部分
  3. 最后,我增加了syctl.conf的价值,并且奏效了

当然,最好阅读这些属性以了解它们的实际作用,例如在sysctl-explorer.net上。

答案 1 :(得分:0)

net/ipv4/igmp_max_memberships的{​​{1}}值更新为大于零。 在终端上执行以下命令: sysctl(或任何其他大于零的值) &安培; $ systctl -w net.ipv4.igmp_max_memberships=20

然后,重新启动avahi-daemon $ sysctl -w net.ipv4.igmp_max_msf=10

您可以使用验证上述键的现有值 'sysctl net.ipv4.igmp_max_memberships'。