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

Function AddMembership

engine/dlib/src/dlib/socket_win32.cpp:296–324  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

294 }
295
296 Result AddMembership(Socket socket, Address multi_addr, Address interface_addr, int ttl)
297 {
298 int result = -1;
299 if (IsSocketIPv4(socket))
300 {
301 assert(multi_addr.m_family == DOMAIN_IPV4 && interface_addr.m_family == DOMAIN_IPV4);
302 struct ip_mreq group;
303 group.imr_multiaddr.s_addr = *IPv4(&multi_addr);
304 group.imr_interface.s_addr = *IPv4(&interface_addr);
305 result = setsockopt(socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&group, sizeof(group));
306 if (result == 0)
307 {
308 uint8_t ttl_byte = (uint8_t)ttl;
309 result = setsockopt(socket, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl_byte, sizeof(ttl_byte));
310 }
311 }
312 else if (IsSocketIPv6(socket))
313 {
314 assert(multi_addr.m_family == DOMAIN_IPV6 && interface_addr.m_family == DOMAIN_IPV6);
315 assert(false && "Interface membership not implemented for IPv6");
316 }
317 else
318 {
319 dmLogError("Failed to add interface membership, unsupported address family!");
320 return RESULT_AFNOSUPPORT;
321 }
322
323 return result == 0 ? RESULT_OK : NATIVETORESULT(DM_SOCKET_ERRNO);
324 }
325
326 Result SetMulticastIf(Socket socket, Address address)
327 {

Callers 2

EnsureMembershipsFunction · 0.70
SetupMulticastCaptureFunction · 0.50

Calls 4

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

Tested by 1

SetupMulticastCaptureFunction · 0.40