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

Function ReceiveFrom

engine/dlib/src/dlib/socket_posix.cpp:491–531  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

489 }
490
491 Result ReceiveFrom(Socket socket, void* buffer, int length, int* received_bytes,
492 Address* from_addr, uint16_t* from_port)
493 {
494 int result = 0;
495 *received_bytes = 0;
496
497 if (IsSocketIPv4(socket))
498 {
499 struct sockaddr_in sock_addr = { 0 };
500 socklen_t addr_len = sizeof(sock_addr);
501
502 result = recvfrom(socket, buffer, length, 0, (struct sockaddr*) &sock_addr, &addr_len);
503 if (result >= 0)
504 {
505 from_addr->m_family = dmSocket::DOMAIN_IPV4;
506 *IPv4(from_addr) = sock_addr.sin_addr.s_addr;
507 *from_port = ntohs(sock_addr.sin_port);
508 *received_bytes = result;
509 }
510 }
511#if !defined(DM_IPV6_UNSUPPORTED)
512 else if (IsSocketIPv6(socket))
513 {
514 struct sockaddr_in6 sock_addr = { 0 };
515 socklen_t addr_len = sizeof(sock_addr);
516
517 result = recvfrom(socket, buffer, length, 0, (struct sockaddr*) &sock_addr, &addr_len);
518 if (result >= 0)
519 {
520 from_addr->m_family = dmSocket::DOMAIN_IPV6;
521 memcpy(IPv6(from_addr), &sock_addr.sin6_addr, sizeof(struct in6_addr));
522 *from_port = ntohs(sock_addr.sin6_port);
523 *received_bytes = result;
524 }
525 }
526#endif // no ipv6
527 else
528 {
529 dmLogError("Failed to receive from remote host, unsupported address family!");
530 return RESULT_AFNOSUPPORT;
531 }
532
533 return result >= 0 ? RESULT_OK : NativeToResultCompat(DM_SOCKET_ERRNO);
534 }

Callers

nothing calls this directly

Calls 2

IPv4Function · 0.85
IsSocketIPv4Function · 0.70

Tested by

no test coverage detected