--- file_descriptor.cpp.old 2010-11-30 17:33:04.270276223 +0200 +++ file_descriptor.cpp 2010-11-30 17:55:48.451327706 +0200 @@ -267,8 +267,11 @@ return result == 0 ? -1 : static_cast(result); #else // #ifdef BOOST_IOSTREAMS_WINDOWS errno = 0; - std::streamsize result = BOOST_IOSTREAMS_FD_READ(handle_, s, n); - if (errno != 0) + std::streamsize result = 0; + do { + result = BOOST_IOSTREAMS_FD_READ(handle_, s, n); + } while (result == -1L && errno == EINTR); + if (result == -1L) throw_system_failure("failed reading"); return result == 0 ? -1 : result; #endif // #ifdef BOOST_IOSTREAMS_WINDOWS