+ size_t space;
+ ssize_t r2;
+
+ /* To prevent partial messages (sometimes it takes multiple reads to
+ * get the complete message) wait for a short time to get the rest of
+ * the message. */
+ space = sizeof(buffer) - (size_t)r;
+ while (space > 0 && wait_for_write(fd, 1 /* second */)) {
+ r2 = read(fd, buffer + r, space);
+ if (r2 <= 0) {
+ break;
+ }
+ r += r2;
+ space -= (size_t)r2;
+ }
+