How to get the errno from an IOError in haskell?

errno, ghc, haskell, io

Solution

`errno` is thread-local in GHC. You'll need to trap the errno in one thread; then send the value down a `Chan` or other communication abstraction to your listening thread.

The value itself is stored in thread TSO structure.

Problem

I'm on the haskell platform, GHC 6.12.1 as apt-get installed on Debian Squeeze. How can I get the underlying errno out of an IOError, given that I need it on a different thread to where it was originally raised? The reason I need this is because I'm implementing a network protocol which exposes the actual errno value on the wire. Do I need to reconstruct it?

Original source