simplify osx_write_post_select()
[paraslash.git] / dccp_send.c
index aba21a6..bb46678 100644 (file)
@@ -120,15 +120,22 @@ static void dccp_shutdown_client(struct dccp_client *dc)
        free(dc);
 }
 
+#define DCCP_RETRIES 100
+
 static int dccp_write(int fd, const char *buf, size_t len)
 {
        size_t size, written = 0;
-       int ret;
+       int ret, retries = 0;
 again:
        size = PARA_MIN(1024, len - written);
        ret = write(fd, buf + written, size);
-       if (ret < 0)
-               goto err_out;
+       if (ret < 0) {
+               if (errno != EAGAIN || !retries++ > DCCP_RETRIES)
+                       goto err_out;
+               PARA_DEBUG_LOG("EAGAIN #%d@%zd/%zd\n", retries, written, len);
+               goto again;
+       }
+       retries = 0;
        written += ret;
        if (written >= len)
                return written;