Provided by: liblibrecast-dev_0.8.0-1.1build1_amd64 bug

NAME

       lc_channel_detect_gaps,  lc_channel_check_seqno  - check for missing incoming messages and
       send NACK messages if required

LIBRARY

       Librecast library (liblibrecast, -llibrecast)

SYNOPSIS

       #include <librecast/net.h>

       int lc_channel_detect_gaps(lc_channel_t *chan);
       int lc_channel_check_seqno(lc_channel_t *chan, lc_seq_t seq);

       Compile and link with -llibrecast.

DESCRIPTION

       lc_channel_detect_gaps() arranges for a channel  to  check  message  sequence  numbers  of
       recently  received  messages  and  to  send  NACK  messages if it detects gaps. These NACK
       messages will cause the sender to resend the missing messages, which will then  arrive  as
       normal.    The   application   needs   to   receive   messages   using   lc_msg_recv()  or
       lc_socket_listen() which decode the incoming messages and extract  the  sequence  numbers,
       and will then automatically detect gaps.

       lc_channel_check_seqno()  compares  the  sequence  number  passed  to it with the sequence
       numbers of recent messages and sends NACKs if any are deemed missing: it is  necessary  to
       call  this  if  an  application  uses  its own message format, and receives messages using
       functions other than lc_msg_recv() or lc_socket_listen() because the library will not have
       the  information  necessary to extract sequence numbers from messages; however the library
       will still take care of gap detection and NACK messages. The second argument must  be  the
       sequence  number  from  the message as decoded by the application. It is necessary to call
       lc_channel_detect_gaps() before using lc_channel_check_seqno() otherwise the function will
       not do anything. This could be useful for example if gap detection and NACKs are optional,
       and   the   application   will   conditionally   call   lc_channel_detect_gaps()    during
       initialisation,  but  then  can  just  unconditionally call lc_channel_check_seqno() after
       decoding each incoming message.

RETURN VALUE

       lc_channel_detect_gaps() returns 0 on success, and -1 to indicate an  error,  setting  the
       global  variable  errno  to an appropriate code, most likely ENOMEM to indicate that there
       was insufficient memory to set up the required data structures.

       lc_channel_detect_gaps() returns 0 if the message is new, 1 if  it  is  a  duplicate  (the
       sequence  number  has  already  been seen) and -1 to indicate an error transmitting a NACK
       message, setting errno to an appropriate code.

ERRORS

       lc_channel_detect_gaps() can fail with any of the errors the malloc() library function can
       produce,  as  well  as any errors produces by the lc_channel_sidehash() or lc_socket_new()
       functions.

       lc_channel_check_seqno() can fail with any of the errors the lc_socket_send() function can
       produce.

EXAMPLE

   Program source

       lc_ctx_t *lctx;
       lc_channel_t *chan;
       lctx = lc_ctx_new();
       chan = lc_channel_new(lctx, "channel name");
       if (lc_channel_detect_gaps(chan) == -1) {
            /* handle this error */
       }

       /* your program goes here, likely calling lc_msg_recv(chan, ...) or lc_socket_listen(...)  */

       lc_channel_free(chan);
       lc_ctx_free(lctx);

SEE ALSO

       lc_channel_nack_handler(3),   lc_channel_free(3),   lc_msg_recv(3),   lc_socket_listen(3),
       lc_socket_send(3)