Не удается повторно использовать конечную точку после удаления сокета NetMQ
В моем приложении я создаю и удаляю сокеты NetMQ. Я заметил, что не могу связываться с конечной точкой в течение некоторого времени после удаления предыдущего сокета, связанного с этой конечной точкой. Минимальный пример:
const string endpoint = "tcp://127.0.0.1:1234";
using (var publisher = new PublisherSocket())
publisher.Bind(endpoint);
using (var publisher = new PublisherSocket())
publisher.Bind(endpoint); //throws a NetMQException: "Unknown error (0xffffffff)"
Linger
опция установлена в 0, но мне все еще приходится ждать (до нескольких секунд в моих экспериментах) перед вторым связыванием.
Я мог бы добавить Thread.Sleep
или какая-то другая задерживающая инструкция, но она не является ни надежной, ни элегантной.
Это ошибка? Если нет, как правильно убедиться, что я уже могу связываться с конечной точкой?
1 ответ
Решение
Не ошибка, утилита сокета асинхронна и происходит в фоновом потоке. Вы можете попытаться позвонить Unbind до утилизации, это может быть быстрее.