Я пытаюсь выяснить, как написать оболочку clojure, используя асинхронные каналы для UDP-сокета.
Учитывая только часть чтения, моя цель - прочитать пакеты из сокета и поместить их в канал clojure.core.async
. Независимо от того, использую ли я DatagramChannel
или DatagramSocket
, для чтения потребуются некоторые блокирующие вызовы, такие как Selector.select()
или DatagramSocket.receive()
, которые следует поместить в цикл в отдельном потоке.
Как мне правильно остановить приемный поток в этом случае? В чистом Java я бы отправил прерывание потоку, которое остановило бы чтение блокировки с InterruptedException
, но я не знаком с clojure.core.async
, и я не знаю, как >!!
реагирует на прерывание.