2012-05-08 1 views
3

Я на платформе haskell, GHC 6.12.1, как apt-get, установлен на Debian Squeeze. Как я могу получить базовую ошибку из IOError, учитывая, что мне она нужна в другом потоке, откуда она была первоначально создана?Как получить errno из IOError в haskell?

Причина, по которой мне это нужно, заключается в том, что я реализую сетевой протокол, который предоставляет фактическое значение errno на проводе. Нужно ли его восстанавливать?

ответ

4

errnothread-local в GHC. Вам нужно поймать errno в одном потоке; затем отправьте значение вниз на Chan или другую абстракцию связи в вашу прослушивающую нить.

value itself хранится в thread TSO structure.

+0

Я получаю IOError из вызова IO.try, а затем накладываю IOError на TChan. Вы имеете в виду, что мне нужно либо заменить IO.try другим механизмом, либо я должен искать errno, как только у меня есть IOError сразу после IO.try? – regularfry

+0

Вы должны захватить errno одновременно с тем, как вы поймаете исключение, так как оно может быть очищено иначе. –

+0

Фантастический, спасибо. – regularfry