- struct receiver_node *rn = container_of(t, struct receiver_node, task);
- struct private_udp_recv_data *purd = rn->private_data;
- int ret;
- char tmpbuf[UDP_RECV_CHUNK_SIZE];
- size_t packet_size;
-
- if (rn->output_error && *rn->output_error < 0) {
- t->error = *rn->output_error;
- return;
- }
- if (!FD_ISSET(purd->fd, &s->rfds))
- return;
- ret = recv_bin_buffer(purd->fd, tmpbuf, UDP_RECV_CHUNK_SIZE);
- if (ret < 0) {
- if (is_errno(ret, EINTR) || is_errno(ret, EAGAIN))
- goto success;
- t->error = ret;
- return;
+ if (sz < FEC_EOF_PACKET_LEN)
+ return 0;
+ if (iov[0].iov_len >= FEC_EOF_PACKET_LEN) {
+ if (memcmp(iov[0].iov_base, FEC_EOF_PACKET,
+ FEC_EOF_PACKET_LEN) != 0)
+ return 0;
+ return -E_RECV_EOF;