我试图使用TCP协议运行两个正在测试的ZeroMQ REQ / REP端点。第一次测试执行得很好。然后处理端点(通过在套接字和上下文上调用Dispose()),但是第二次测试(使用相同的TCP端点地址)失败,但有一个例外,即“地址已经在使用”'。为什么插座没有正确配置?
答案 0 :(得分:0)
这听起来像是一个并发错误 - 好像网络堆栈或ZeroMQ没有足够快地清理它的资源,下次单元测试再次分配它们。
如果你在测试之间进行短暂睡眠会怎样? (我不喜欢这样的解决方案,但需要调试......)
一个简单的潜在解决方案是使用不同的端口进行不同的测试。
答案 1 :(得分:0)
我也在单元测试中得到了这个。为了解决这个问题,我在套接字关闭后放了10毫秒的休眠时间(我正在重用上下文并进行inproc套接字)。
没有睡眠我得到了已经在使用的问题。 ZMQ在一个单独的线程上运行套接字,所以假设即使使用inproc,在重用地址之前还需要一个上下文切换,以允许套接字线程关闭它。
我很惊讶,如果您正确关闭错误仍然存在的上下文,就像您期望等待套接字线程完成一样,确保释放地址。您可能需要检查libzmq源以了解详细情况。