]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - dccp_send.c
Get rid of sender->status.
[paraslash.git] / dccp_send.c
index 0310584ddad17737efcc110db94a8623fbc1635e..0410c8bca99838a199fe30d92280d7fe333ef15f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2007 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2008 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -24,7 +24,6 @@
 #include "list.h"
 #include "vss.h"
 #include "send.h"
-#include "dccp.h"
 #include "fd.h"
 #include "close_on_fork.h"
 #include "chunk_queue.h"
@@ -66,11 +65,20 @@ static void dccp_post_select(fd_set *rfds, __a_unused fd_set *wfds)
        struct dccp_client *dc;
        int ret;
 
-       if (!FD_ISSET(listen_fd, rfds))
+       if (listen_fd < 0 || !FD_ISSET(listen_fd, rfds))
                return;
        ret = para_accept(listen_fd, NULL, 0);
        if (ret < 0) {
-               PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
+               PARA_ERROR_LOG("%s\n", para_strerror(-ret));
+               return;
+       }
+       /*
+        * Bypass unused CCID paths: the sender does not receive application data
+        * from the client; by shutting down this unused communication path we can
+        * reduce processing costs a bit. See analogous comment in dccp_recv.c.
+        */
+       if (shutdown(ret, SHUT_RD) < 0) {
+               PARA_ERROR_LOG("shutdown(SHUT_RD): %s\n", strerror(errno));
                return;
        }
        dc = para_calloc(sizeof(struct dccp_client));
@@ -192,7 +200,7 @@ static void dccp_send(long unsigned current_chunk,
 //             PARA_DEBUG_LOG("writing %d bytes to fd %d\n", len, dc->fd);
                ret = dccp_write(dc->fd, buf, len);
                if (ret < 0) {
-                       PARA_NOTICE_LOG("%s\n", PARA_STRERROR(-ret));
+                       PARA_NOTICE_LOG("%s\n", para_strerror(-ret));
                        dccp_shutdown_client(dc);
                        continue;
                }
@@ -254,9 +262,6 @@ void dccp_send_init(struct sender *s)
        s->client_cmds[SENDER_DELETE] = NULL;
        self = s;
        ret = dccp_open();
-       if (ret < 0) {
-               PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
-               s->status = SENDER_OFF;
-       } else
-               s->status = SENDER_ON;
+       if (ret < 0)
+               PARA_ERROR_LOG("%s\n", para_strerror(-ret));
 }