diff options
Diffstat (limited to 'lib/Handle.cc')
-rw-r--r-- | lib/Handle.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/Handle.cc b/lib/Handle.cc index 4124231..253ddbf 100644 --- a/lib/Handle.cc +++ b/lib/Handle.cc @@ -26,7 +26,7 @@ ssize_t Handle::write(const void *buf, size_t count) throw (GeneralException) { done = true; errno = 0; if ((r = ::write(h, buf, count)) < 0) { - if ((!errno) || (errno = EAGAIN)) { + if ((!errno) || (errno == EAGAIN) || (errno == EINTR)) { // Avant de déclarer une erreur, on vérifie si ce n'est pas un // problème lié au fait qu'il n'y a plus de place libre. Cela peut // arriver si l'on agit sur un pipe ou un handle. Nous @@ -61,7 +61,7 @@ ssize_t Handle::read(void *buf, size_t count) throw (GeneralException) { errno = 0; if ((r = ::read(h, buf, count)) < 0) { - if ((!errno) || (errno = EAGAIN)) { + if ((!errno) || (errno == EAGAIN) || (errno == EINTR)) { // Avant de déclarer une erreur, on vérifie si ce n'est pas un // problème lié au fait qu'il n'y a plus d'octets. throw IOAgain(); @@ -133,6 +133,8 @@ void Handle::close() { ::close(h); } + h = -1; + closed = 1; } |