---
name: "evs_mcast_groups"
section: "3"
platform: "linux"
package: "corosync-dev"
version: "1.4.6-1.1"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/evs_mcast_groups"
---

# evs\_mcast\_groups(3)

Multicast a message to selected groups

## NAME

evs\_join - Multicast a message to selected groups

## SYNOPSIS

**#include \<sys/uio.h\>** **#include \<corosync/evs.h\>**

**int evs\_mcast\_groups(evs\_handle\_t** *handle***, evs\_guraantee\_t** *guarantee***, evs\_group\_t \****groups***, int group\_entries, struct iovec \****iovec***, int** *iov\_len***);**

## DESCRIPTION

The **[evs\_mcast\_groups(3)](/evs_mcast_groups/3.md)** function multicasts a message to all the groups specified in the arguemnt *groups.* Messages are delivered to all processors in the system that are described by the current configuration.

The argument *handle* describes a handle created with **[evs\_initialize(3)](/evs_initialize/3.md).**

The argument *guarantee* requests a delivery guarantee for the message to be sent.  The evs\_guarantee\_t type is defined by:

-

  ```
  typedef enum {
  	EVS_TYPE_UNORDERED,	/* not implemented */
  	EVS_TYPE_FIFO,          /* same as agreed */
  	EVS_TYPE_AGREED,	/* implemented */
  	EVS_TYPE_SAFE           /* not implemented */
  } evs_guarantee_t;
  ```

-

  The meanings of the evs\_guarantee\_t typedef are:

- **EVS\_GUARANTEE\_UNORDERED**

  Messages are guaranteed to be delivered, but with no particular order.  This mode is unimplemented in the EVS library.

- **EVS\_GUARANTEE\_FIFO**

  Messages are guaranteed to be delivered in first sent first delivery order from one one.  In fact, this guarantee is actually the AGREED guarantee.

- **EVS\_GUARANTEE\_AGREED**

  All processors must agree on the order of delivery.  If a message is sent from two or more processors at about the same time, the delivery will occur in the same order to all processors.

- **EVS\_GUARANTEE\_SAFE**

  All processors must agree on the order of delivery.  Further all processors must have a copy of the message before any delivery takes place.  This mode is unimplemented in the EVS library.

The *groups* argument is of the type evs\_group\_t which is defined by the structure:

-

  ```
  typedef struct {
  	char key[32];
  } evs_groups_t;
  ```

-

  The *group\_entries* argument describes the number of entries in the *group* argument.

The *iovec* argument describes the scatter/gather list which is used to transmit a message.  This is a standard socket structure described by:

-

  ```
  struct iovec
  {
  	void *iov_base;     /* Pointer to data.  */
  	unsigned int iov_len;     /* Length of data.  */
  };
  ```

-

  The *iovlen* argument describes the number of entires in the *iovec* argument.

## RETURN VALUE

This call returns the EVS\_OK value if successful, otherwise an error is returned.

## ERRORS

The errors are undocumented.

## SEE ALSO

[**evs\_overview**(8)](/evs_overview/8.md), [**evs\_initialize**(3)](/evs_initialize/3.md), [**evs\_finalize**(3)](/evs_finalize/3.md), [**evs\_fd\_get**(3)](/evs_fd_get/3.md), [**evs\_dispatch**(3)](/evs_dispatch/3.md), [**evs\_leave**(3)](/evs_leave/3.md), [**evs\_join**(3)](/evs_join/3.md), [**evs\_mcast\_joined**(3)](/evs_mcast_joined/3.md), [**evs\_membership\_get**(3)](/evs_membership_get/3.md) [**evs\_context\_get**(3)](/evs_context_get/3.md) [**evs\_context\_set**(3)](/evs_context_set/3.md)
