- size_t total = 0, bytesleft = *len; /* how many we have left to send */
- int n = -1;
-
- while (total < *len) {
- n = send(fd, buf + total, bytesleft, 0);
- if (n == -1)
- break;
- total += n;
- bytesleft -= n;
- if (total < *len)
- PARA_DEBUG_LOG("short write (%zd byte(s) left)\n",
- *len - total);
+ size_t total = *len;
+
+ assert(total);
+ *len = 0;
+ while (*len < total) {
+ int ret = send(fd, buf + *len, total - *len, 0);
+ if (ret == -1)
+ return -ERRNO_TO_PARA_ERROR(errno);
+ *len += ret;