int nn_xreq_add (struct nn_sockbase *self, struct nn_pipe *pipe) { struct nn_xreq *xreq; struct nn_xreq_data *data; int sndprio; int rcvprio; size_t sz; xreq = nn_cont (self, struct nn_xreq, sockbase); sz = sizeof (sndprio); nn_pipe_getopt (pipe, NN_SOL_SOCKET, NN_SNDPRIO, &sndprio, &sz); nn_assert (sz == sizeof (sndprio)); nn_assert (sndprio >= 1 && sndprio <= 16); sz = sizeof (rcvprio); nn_pipe_getopt (pipe, NN_SOL_SOCKET, NN_RCVPRIO, &rcvprio, &sz); nn_assert (sz == sizeof (rcvprio)); nn_assert (rcvprio >= 1 && rcvprio <= 16); data = nn_alloc (sizeof (struct nn_xreq_data), "pipe data (req)"); alloc_assert (data); nn_pipe_setdata (pipe, data); nn_lb_add (&xreq->lb, &data->lb, pipe, sndprio); nn_fq_add (&xreq->fq, &data->fq, pipe, rcvprio); return 0; }
static int nn_xpush_add (struct nn_sockbase *self, struct nn_pipe *pipe) { struct nn_xpush *xpush; struct nn_xpush_data *data; int sndprio; size_t sz; xpush = nn_cont (self, struct nn_xpush, sockbase); sz = sizeof (sndprio); nn_pipe_getopt (pipe, NN_SOL_SOCKET, NN_SNDPRIO, &sndprio, &sz); nn_assert (sz == sizeof (sndprio)); nn_assert (sndprio >= 1 && sndprio <= 16); data = nn_alloc (sizeof (struct nn_xpush_data), "pipe data (push)"); alloc_assert (data); nn_pipe_setdata (pipe, data); nn_lb_add (&xpush->lb, pipe, &data->lb, sndprio); return 0; }
static int nn_xsub_add (struct nn_sockbase *self, struct nn_pipe *pipe) { struct nn_xsub *xsub; struct nn_xsub_data *data; int rcvprio; size_t sz; xsub = nn_cont (self, struct nn_xsub, sockbase); sz = sizeof (rcvprio); nn_pipe_getopt (pipe, NN_SOL_SOCKET, NN_RCVPRIO, &rcvprio, &sz); nn_assert (sz == sizeof (rcvprio)); nn_assert (rcvprio >= 1 && rcvprio <= 16); data = nn_alloc (sizeof (struct nn_xsub_data), "pipe data (sub)"); alloc_assert (data); nn_pipe_setdata (pipe, data); nn_fq_add (&xsub->fq, &data->fq, pipe, rcvprio); return 0; }
int nn_xsurveyor_add (struct nn_sockbase *self, struct nn_pipe *pipe) { struct nn_xsurveyor *xsurveyor; struct nn_xsurveyor_data *data; int rcvprio; size_t sz; xsurveyor = nn_cont (self, struct nn_xsurveyor, sockbase); sz = sizeof (rcvprio); nn_pipe_getopt (pipe, NN_SOL_SOCKET, NN_RCVPRIO, &rcvprio, &sz); nn_assert (sz == sizeof (rcvprio)); nn_assert (rcvprio >= 1 && rcvprio <= 16); data = nn_alloc (sizeof (struct nn_xsurveyor_data), "pipe data (xsurveyor)"); alloc_assert (data); data->pipe = pipe; nn_fq_add (&xsurveyor->inpipes, &data->initem, pipe, rcvprio); nn_dist_add (&xsurveyor->outpipes, &data->outitem, pipe); nn_pipe_setdata (pipe, data); return 0; }