我尝试在Chrome扩展程序中实施Nacl模块,尝试使用GigE Vision控制服务(gvcp)发现GigE相机。所以我必须在端口3956上发送UDP广播消息。为此,我使用 sendmsg()功能。
在我的 Nacl 模块中(使用 pnacl 工具链编译),我使用 nacl_io ,我可以成功发送UDP消息使用经典的主机地址(比如说192.168.1.12)。我可以使用Wireshark看到发出的消息。
但是当我切换到INADDR_BROADCAST地址时,我可以看到我对 sendmsg()函数的调用是成功的(我发送了4个字节,这个调用的结果很好等于4)。 。 但网络上并没有真正发生 。我看不到使用Wireshark发送的任何广播消息。
使用Nacl日志记录,我在日志中看不到任何Nacl错误。
我使用pepper_56。
请注意:
- 我使用的是Ubuntu 16.10发行版
- chrome版本为56.0.2924.87(64位)
- chrome使用--allow-nacl-socket-api = localhost
启动
- 使用了pepper c ++ API(好吧,模块是用C ++编写的,但是使用了nacl_io调用:我不直接依赖于pp :: UDPSocket ...)
- nacl_io函数调用在专用工作线程中完成(如果不是这种情况,则在任何先前的socket(),bind()调用上都会发生EPERM错误,并且具有主机地址的示例将失败还)
- 我不能使用另一个调用而不是sendmsg()。事实上,我在这里描述的是该问题的小型重现器的行为,但最后,我需要依赖使用底层sendmsg()函数的glib。所以,请不要让我检查send()或write()或...... :-)我需要坚持使用sendmsg()函数。
- 用于加载包含对Nacl模块的引用的html页面的URL为http://localhost:5103。即在开发模式下,我不使用Chrome扩展程序......
- ...但我已经在Chrome扩展程序中检查了(仅限开发者模式)并且结果相同
- 我不开发Chrome应用程序(因此,没有Chrome应用程序清单,因此无权设置等...)
pepper_56是否支持UDP广播?知道为什么它不起作用吗?