summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-11-19 19:07:32 +0100
committerMaxime Coste <frrrwww@gmail.com>2012-11-19 19:07:32 +0100
commit1602fcf012e8771485df590e994d8d0462480cab (patch)
tree83c64e71db873425a9b922187db334311cb5e559 /src
parentfe98ba7494051396e094d1dba3641b2514037eec (diff)
Remote: read now retry when it did not get all the expected data
Diffstat (limited to 'src')
-rw-r--r--src/remote.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/remote.cc b/src/remote.cc
index 8d5a6592..2fb71223 100644
--- a/src/remote.cc
+++ b/src/remote.cc
@@ -89,12 +89,17 @@ void write(Message& msg, const DisplayBuffer& display_buffer)
void read(int socket, char* buffer, size_t size)
{
- int res = ::read(socket, buffer, size);
- if (res == 0)
- throw peer_disconnected{};
- if (res == -1)
- throw socket_error{};
- assert(res == size);
+ while (size)
+ {
+ int res = ::read(socket, buffer, size);
+ if (res == 0)
+ throw peer_disconnected{};
+ if (res < 0)
+ throw socket_error{};
+
+ buffer += res;
+ size -= res;
+ }
}
template<typename T>