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

Function ReceiveFrom

engine/dlib/src/dlib/socket_win32.cpp:573–612  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

571 }
572
573 Result ReceiveFrom(Socket socket, void* buffer, int length, int* received_bytes, Address* from_addr, uint16_t* from_port)
574 {
575 int result = 0;
576 *received_bytes = 0;
577
578 if (IsSocketIPv4(socket))
579 {
580 struct sockaddr_in sock_addr = { 0 };
581 socklen_t addr_len = sizeof(sock_addr);
582
583 result = recvfrom(socket, (char*)buffer, length, 0, (struct sockaddr*)&sock_addr, &addr_len);
584 if (result >= 0)
585 {
586 from_addr->m_family = dmSocket::DOMAIN_IPV4;
587 *IPv4(from_addr) = sock_addr.sin_addr.s_addr;
588 *from_port = ntohs(sock_addr.sin_port);
589 *received_bytes = result;
590 }
591 }
592#if !defined(DM_IPV6_UNSUPPORTED)
593 else if (IsSocketIPv6(socket))
594 {
595 struct sockaddr_in6 sock_addr = { 0 };
596 socklen_t addr_len = sizeof(sock_addr);
597
598 result = recvfrom(socket, (char*)buffer, length, 0, (struct sockaddr*)&sock_addr, &addr_len);
599 if (result >= 0)
600 {
601 from_addr->m_family = dmSocket::DOMAIN_IPV6;
602 memcpy(IPv6(from_addr), &sock_addr.sin6_addr, sizeof(struct in6_addr));
603 *from_port = ntohs(sock_addr.sin6_port);
604 *received_bytes = result;
605 }
606 }
607#endif // no ipv6
608 else
609 {
610 dmLogError("Failed to receive from remote host, unsupported address family!");
611 return RESULT_AFNOSUPPORT;
612 }
613
614 return result >= 0 ? RESULT_OK : NativeToResultCompat(DM_SOCKET_ERRNO);
615 }

Callers 5

HandleIncomingQueriesFunction · 0.70
HandleBrowserResponsesFunction · 0.70
DrainSocketFunction · 0.50

Calls 2

IPv4Function · 0.85
IsSocketIPv4Function · 0.70

Tested by 3

DrainSocketFunction · 0.40