private void recvProc() { ZMQ.Socket reqs = CTX.Socket(ZMQ.SocketType.PULL); reqs.Connect(sub_addr); var items = new[] { reqs.CreatePollItem(ZMQ.IOMultiPlex.POLLIN | ZMQ.IOMultiPlex.POLLERR) }; while (isRunning) { int res = CTX.Poll(items, 1000 * 1000); if (res == 0) { continue; } foreach (byte[] data in reqs.RecvAll(ZMQ.SendRecvOpt.NOBLOCK)) { if (data == null) { continue; } recvQ.Enqueue(data); itemsReadyToRecv.Set(); } } reqs.Dispose(); itemsReadyToRecv.Close(); Interlocked.Decrement(ref threadStillRunning); }