#include "para.h"
#include "error.h"
-#include "dccp.h"
#include "list.h"
#include "sched.h"
#include "recv.h"
if (ret < 0)
return ret;
+ /*
+ * Disable unused CCIDs: the receiver does not send any application data to the
+ * server. By shutting down this unused path we reduce internal processing costs,
+ * as the unused CCIDs (in the kernel) are then bypassed.
+ */
+ if (shutdown(ret, SHUT_WR) < 0)
+ return -ERRNO_TO_PARA_ERROR(errno);
rn->buf = para_calloc(DCCP_BUFSIZE);
rn->private_data = pdd = para_calloc(sizeof(struct private_dccp_recv_data));
struct receiver_node *rn = t->private_data;
struct private_dccp_recv_data *pdd = rn->private_data;
- t->ret = -E_DCCP_RECV_EOF;
- if (rn->output_eof && *rn->output_eof)
+ if (rn->output_error && *rn->output_error) {
+ t->ret = *rn->output_error;
goto out;
+ }
t->ret = 1;
if (!s->select_ret || !FD_ISSET(pdd->fd, &s->rfds))
goto out; /* nothing to do */
DCCP_BUFSIZE - rn->loaded);
if (t->ret <= 0) {
if (!t->ret)
- t->ret = -E_DCCP_RECV_EOF;
+ t->ret = -E_RECV_EOF;
goto out;
}
rn->loaded += t->ret;
return;
out:
if (t->ret < 0)
- rn->eof = 1;
+ rn->error = t->ret;
}
/**