MCPcopy Create free account
hub / github.com/defold/defold / AddMembership

Function AddMembership

engine/dlib/src/dlib/socket_posix.cpp:206–237  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

204 }
205
206 Result AddMembership(Socket socket, Address multi_addr, Address interface_addr, int ttl)
207 {
208#if defined(__EMSCRIPTEN__)
209 return RESULT_AFNOSUPPORT;
210#else
211 int result = -1;
212 if (IsSocketIPv4(socket))
213 {
214 assert(multi_addr.m_family == DOMAIN_IPV4 && interface_addr.m_family == DOMAIN_IPV4);
215 struct ip_mreq group;
216 group.imr_multiaddr.s_addr = *IPv4(&multi_addr);
217 group.imr_interface.s_addr = *IPv4(&interface_addr);
218 result = setsockopt(socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&group, sizeof(group));
219 if (result == 0)
220 {
221 uint8_t ttl_byte = (uint8_t) ttl;
222 result = setsockopt(socket, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl_byte, sizeof(ttl_byte));
223 }
224 } else if (IsSocketIPv6(socket))
225 {
226 assert(multi_addr.m_family == DOMAIN_IPV6 && interface_addr.m_family == DOMAIN_IPV6);
227 assert(false && "Interface membership not implemented for IPv6");
228 }
229 else
230 {
231 dmLogError("Failed to add interface membership, unsupported address family!");
232 return RESULT_AFNOSUPPORT;
233 }
234
235 return result == 0 ? RESULT_OK : NATIVETORESULT(DM_SOCKET_ERRNO);
236#endif
237 }
238
239 Result SetMulticastIf(Socket socket, Address address)
240 {

Callers

nothing calls this directly

Calls 4

IPv4Function · 0.85
IsSocketIPv4Function · 0.70
IsSocketIPv6Function · 0.70
assertFunction · 0.50

Tested by

no test coverage detected