NAME
    SCI_Bcast - Broadcasts messages from the front end to some back ends

C Syntax
    #include <sci.h>
    int SCI_Bcast(int filter_id, sci_group_t group, int num_bufs, void *bufs[], int sizes[])

INPUT PARAMETERS
    filter_id
        The id of the message filter (IN).
    group
        The group which the message belongs to (IN).
    num_bufs
        The number of buffers of current message segment (IN).
    bufs
        The array of buffer locations of current message segment (IN).
    sizes
        The array of buffer sizes of current message segment (IN).

DESCRIPTION
    This subroutine is used to broadcast messages from the front end to all 
    or part of back ends. The receivers can be determined by group if set
    filter_id to SCI_FILTER_NULL, which means do not use message filter,
    and a predefined group named SCI_GROUP_ALL means all back ends, or can 
    be determined by filter_id if a new message filter is loaded by 
    SCI_Filter_load.

    This is a non-blocking call. The caller cannot assume that message transfer
    has completed upon the return of the function. Instead, the handler function
    defined in sci_info_t should be used to ensure the message arrival in the 
    destination sides.

    For more information, please refer to SCI's online documents.

EXAMPLE
        {
                char msg[256];
                int sizes[1];
                void *bufs[1];
                ...
                bufs[0] = msg;
                sizes[0] = strlen(msg) + 1;
                SCI_Bcast(SCI_FILTER_NULL, SCI_GROUP_ALL, 1, bufs, sizes);
        }

ERRORS
    All SCI routines return an error value.

    SCI_ERR_UNINTIALIZED
        Uninitialized SCI execution environment
    SCI_ERR_INVALID_CALLER
        Can only be called in the front end
    SCI_ERR_GROUP_NOTFOUND
        Undefined group
    SCI_ERR_NO_MEM
        Out of memory

SEE ALSO
    SCI_Upload(3)
    SCI_Poll(3)
