epoll-0.1: examples/StdinM.hs
module Main where
import Text.Printf
import Control.Monad.Reader
import System.IO
import System.Posix.IO
import System.Linux.EpollM
eventTypes :: [EventType]
eventTypes = [inEvent, edgeTriggeredEvent, oneShotEvent]
callback :: Event a -> Epoll ()
callback e = do
let fd = eventFd e
et = eventType e
ds = eventDesc e
liftIO $ do
setFdOption fd NonBlockingRead True
printf "event=%s, fd=%s\n" (show et) (show fd)
(s, c) <- fdRead fd 16
printf "read %s byte(s): %s\n" (show c) s
modify eventTypes ds
main :: IO ()
main = runEpollSmall_ $ do
add_ eventTypes stdInput
defaultDispatchLoop callback