osx_write.c: Add doxygen description for struct private_osx_write_data
[paraslash.git] / dccp_send.c
index aba21a6db1d2e92aa997a964a053d8000df9b2f1..bb46678e8cdd84bd58cbc609b1c8e19252407d7a 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;