remove duplicate prototypes for signal functions
[paraslash.git] / dccp_send.c
index aba21a6db1d2e92aa997a964a053d8000df9b2f1..273961fcf908fdfbc6faa2b953210930a48fae5e 100644 (file)
@@ -76,7 +76,7 @@ static void dccp_post_select(fd_set *rfds, __a_unused fd_set *wfds)
        }
        PARA_NOTICE_LOG("connection from %s\n", inet_ntoa(dc->addr.sin_addr));
        dc->fd = ret;
-       list_add(&dc->node, &clients);
+       para_list_add(&dc->node, &clients);
        add_close_on_fork_list(dc->fd);
        mark_fd_nonblock(dc->fd);
 }
@@ -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;