colorful blackness gui theme: adjust field with for 80 chars terminals
[paraslash.git] / dccp_send.c
index 08930ad1852321f877fac474b839ea71bc5ee5d8..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 send, written = 0;
-       int ret;
+       size_t size, written = 0;
+       int ret, retries = 0;
 again:
-       send = PARA_MIN(1024, len - written);
-       ret = write(fd, buf + written, send);
-       if (ret < 0)
-               goto err_out;
+       size = PARA_MIN(1024, len - written);
+       ret = write(fd, buf + written, size);
+       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;