0

我正在尝试在 Beaglebone Black 上运行MOOS-IvP

在尝试运行 MOOS 数据库时,它会不断抛出异常

“侦听循环中抛出异常:侦听套接字时出错。不支持操作”

该软件在树莓派上运行

任何想法可能是什么问题?

4

2 回答 2

0

我发现了问题并修复了它。

创建套接字时,它需要是 TCP。但是,当在 XPCGetProtocol 类中调用 getprotobyname(_sName) 以在 /etc/protocols 中查找正确的协议号时,它会返回上一次调用的值,即设置 UDP 套接字时的值。

为了解决这个问题,我简单地调用了该函数两次,第二次返回正确的值。

我不知道为什么它第一次返回不正确,但这有效!

于 2014-03-12T05:29:18.083 回答
0

在使用运行 Ubuntu 14.04 的 BeagleBone Black 时,我也遇到了这个错误。但是,两次运行请求的解决方案不起作用。更多故障排除使我确定应该是 TCP 套接字的那个是在另一个进程打开 UDP 套接字之后打开的。返回的结构getprotobyname()是指向静态位置的指针,该位置不会因调用而改变,但会随着协议详细信息而更新(尽管对于另一个 Unix 操作系统,请参见此处)。因此,另一个进程的第二次调用会覆盖原来的细节。

然后在 的构造函数中创建套接字期间对其进行测试XPCSocket,并导致创建一个应该是 TCP 套接字的 UDP 套接字。这可能可以通过向该函数添加锁来解决,但我采用非阻塞方法来初始化请求的协议,使用构造函数调用的字符串 ( _sProtocol) 而不是socketProtocol结构中返回的字符串。此外,我修改了XPCGetProtocol类以将协议号存储在成员变量中,该成员变量在后续调用getprotobyname().

我的修改可以在这里找到。

于 2015-01-12T22:56:32.053 回答