Haskell SendFile zero-copy - отмена передачи - PullRequest
2 голосов
/ 27 апреля 2020

Привет! Я хочу использовать следующую библиотеку в Haskell для передачи файлов между узлами: https://hackage.haskell.org/package/sendfile-0.7.11.1/docs/Network-Socket-SendFile.html

Я хочу иметь возможность прервать sendFile, если файл в основном был перенесен другим узлом ...

Я думал об использовании итерируемого, как в этом примере:

runIter :: IO Iter -> IO ()
runIter iter =
   do r <- iter
      case r of
        (Done _n)      -> return ()
        (Sent _n cont) -> runIter cont
        (WouldBlock _n fd cont) -> 
            do threadWaitWrite fd
               runIter cont

Мой вопрос: как я могу прервать этот перевод?

Я думал о том, чтобы сделать что-то вроде этого:

(Sent _n cont) -> return () или (Sent _n cont) -> error "Already downloaded (Abort)"

По сути, клиент мог узнать, что вызов был прерван ...

В библиотеке ничего не объясняется для реализации такого поведения ...

...