0

我有一个监听 Unix 套接字的 Scotty 应用程序。我希望应用程序在退出时删除套接字(即当我键入Ctrl-时C),但我不确定如何完成此操作。我的main功能看起来像

main = do
    sock <- socket AF_UNIX Stream 0
    bind sock $ SockAddrUnix "/tmp/my_app.sock"
    listen sock maxListenQueue

    scottySocket def sock $ do
        ...

    removeFile "/tmp/my_app.sock"

当我键入时Ctrl——函数未被调用——CremoveFile似乎是 Scotty 框架没有或无法捕捉到的中断。有没有办法执行这样的清理操作?

4

1 回答 1

2

最简单的原则方法可能是使用bracketfrom Control.Exception

main = bracket acquireSock cleanupSock $ \(sock, _) -> do
    listen sock maxListenQueue
    scottySocket def sock $ do
        ...
    where
    -- Acquiring the resource.
    acquireSock = do
        sock <- socket AF_UNIX Stream 0
        let sockPath = "/tmp/my_app.sock"
        bind sock $ SockAddrUnix sockPath
        return (sock, sockPath)
    -- Releasing the resource.
    cleanupSock (sock, sockPath) = do
        removeFile sockPath
        close sock
于 2015-09-05T19:26:15.110 回答