58 const bool group_membership,
const Timeout & timeout,
60 SSRC_DECL_THROW(
Error)
66 Spread::SP_connect_timeout(connection.c_str(),
67 (name.size() == 0 ? 0 : name.c_str()), priority,
68 group_membership, &_mbox, private_group,
74 ::fcntl(_mbox, F_SETFD, (::fcntl(_mbox, F_GETFD) | FD_CLOEXEC));
76 _connection = connection;
77 _group_membership = group_membership;
78 _private_group = private_group;
81 _drop_receive =
false;
95 SSRC_DECL_THROW(
Error)
100 Spread::SP_multigroup_scat_multicast(_mbox, message.service(),
101 groups.size(), groups.groups(),
102 message.type(), message.scatter());
113 SSRC_DECL_THROW(
Error)
115 clear_message_parts();
116 add_message_part(message);
117 _scatter.set_type(message.type());
118 _scatter.set_service(message.service());
119 return send(_scatter, groups);
127 SSRC_DECL_THROW(
Error)
131 clear_message_parts();
132 add_message_part(message);
133 _scatter.set_type(message.type());
134 _scatter.set_service(message.service());
135 return send(_scatter, _groups);
177 groups.resize(groups.capacity());
178 message.init_pre_receive();
181 type = 0, num_groups = 0, endian_mismatch = 0;
185 Spread::SP_scat_receive(_mbox, &stype, sender, groups.
size(), &
num_groups,
191 groups.resize(-num_groups);
192 if(endian_mismatch == 0)
202 groups.resize(-num_groups);
206 Message *m = message.message(last_message);
208 message.resize_message(last_message,
209 - endian_mismatch - message.
size() + m->
size());
213 }
else if(result < 0)
224 groups.resize(num_groups);
225 message.init_post_receive(result);