Сокет ZeroMQ Recv () выдает исключение «Контекст был прерван» - зачем и как восстановить?

Используя сокет обмена сообщениями ZMQ.SocketType.REP (ответ) с ZeroMQ, я получаю сообщения, а затем отправляю ответное сообщение «ОК».

На данный момент я пробую это локально (отправка / получение сообщений из одного и того же консольного приложения C #, запущенного на том же компьютере).

Довольно регулярно (примерно после 1500 сообщений) строка:

var receiveBytes = _recvSocket.Recv ();

... вызовет исключение: Контекст был прерван

Мой вопрос: почему это происходит, и как восстановить его ?

У меня есть System.Threading.Thread , предназначенный для запуска моего сокета ответа ZeroMQ на стороне сервера, вот цикл, который он запускает :

    private static void MessagingLoopReceive(object state)
    {
        if (_zmqc == null)
        {
            _zmqc = new ZMQ.Context(1);
        }

        _recvSocket = _zmqc.Socket(ZMQ.SocketType.REP);
        _recvSocket.Bind("tcp://*:5556");

        while (true)
        {
            if (_queueStop)
            {
                break;
            }

            //Console.WriteLine("Server blocking for receive...");
            var receivedBytes = _recvSocket.Recv();

            if (receivedBytes != null && receivedBytes.Length > 0)
            {
                //Console.WriteLine("Server message received from client, sending OK");
                _recvSocket.Send("OK", Encoding.ASCII);
                //Console.WriteLine("Server OK sent, adding message to queue");
                _queuedMessages.Enqueue(receivedBytes);
            }
            else
            {
                Thread.Sleep(1);
            }
        }
    }
5
задан Brandon 5 November 2011 в 18:43
поделиться