
14 May
2018
14 May
'18
9:36 a.m.
Niklas Hambüchen
I just got reminded that epoll() has no effect on regular files on Linux by reading an nginx article [1] [2] and why that is [3] [4].
By what means does the IO manager make reads (wraps around the read() syscall on Linux) non-blocking?
Does it always use read() in `foreign import safe` (or `interruptible`) so that an OS thread is spawned?
It would be great if somebody could point me to the code where that's done (not again: for *regular* files).
I believe the relevant implementation is the RawIO instance defined in GHC.IO.FD. The read implementation in particular is GHC.IO.FD.readRawBufferPtr. There is a useful Note directly above this function. Cheers, - Ben