在单元测试下运行ZeroMQ - 已在使用的地址

时间:2014-04-10 19:50:17

标签: c# .net visual-studio nunit zeromq

我试图使用TCP协议运行两个正在测试的ZeroMQ REQ / REP端点。第一次测试执行得很好。然后处理端点(通过在套接字和上下文上调用Dispose()),但是第二次测试(使用相同的TCP端点地址)失败,但有一个例外,即“地址已经在使用”'。为什么插座没有正确配置?

2 个答案:

答案 0 :(得分:0)

这听起来像是一个并发错误 - 好像网络堆栈或ZeroMQ没有足够快地清理它的资源,下次单元测试再次分配它们。

如果你在测试之间进行短暂睡眠会怎样? (我不喜欢这样的解决方案,但需要调试......)

一个简单的潜在解决方案是使用不同的端口进行不同的测试。

答案 1 :(得分:0)

我也在单元测试中得到了这个。为了解决这个问题,我在套接字关闭后放了10毫秒的休眠时间(我正在重用上下文并进行inproc套接字)。

没有睡眠我得到了已经在使用的问题。 ZMQ在一个单独的线程上运行套接字,所以假设即使使用inproc,在重用地址之前还需要一个上下文切换,以允许套接字线程关闭它。

我很惊讶,如果您正确关闭错误仍然存​​在的上下文,就像您期望等待套接字线程完成一样,确保释放地址。您可能需要检查libzmq源以了解详细情况。