My guess is that what's probably happening is that your program is getting a signal (probably SIGCHILD or SIGPIPE or something), which is causing the read() call inside -readDataOfLength: to return prematurely with EINTR, hence the exception you're seeing. It's quite annoying that the -readData methods don't handle this better. I think in at least one place in our code we intentionally avoid using NSFileHandle's -read methods for this very reason.