| 494 | } |
| 495 | |
| 496 | NetworkReadPacket receiveData( |
| 497 | void* buffer, size_t size, size_t* sizeReceived, std::unique_ptr<INetworkEndpoint>* sender) override |
| 498 | { |
| 499 | sockaddr_in6 senderAddr{}; |
| 500 | socklen_t senderAddrLen = sizeof(sockaddr_in); |
| 501 | if (_status != SocketStatus::listening) |
| 502 | { |
| 503 | senderAddrLen = _endpoint.getAddressLen(); |
| 504 | std::memcpy(&senderAddr, &_endpoint.getAddress(), senderAddrLen); |
| 505 | } |
| 506 | auto readBytes = recvfrom( |
| 507 | _socket, static_cast<char*>(buffer), static_cast<int32_t>(size), 0, reinterpret_cast<sockaddr*>(&senderAddr), &senderAddrLen); |
| 508 | if (readBytes <= 0) |
| 509 | { |
| 510 | *sizeReceived = 0; |
| 511 | return NetworkReadPacket::noData; |
| 512 | } |
| 513 | |
| 514 | *sizeReceived = readBytes; |
| 515 | if (sender != nullptr) |
| 516 | { |
| 517 | *sender = std::make_unique<NetworkEndpoint>(reinterpret_cast<sockaddr*>(&senderAddr), senderAddrLen); |
| 518 | } |
| 519 | return NetworkReadPacket::success; |
| 520 | } |
| 521 | |
| 522 | void close() override |
| 523 | { |
no test coverage detected