mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-02-05 11:28:40 +01:00
added support for MSG_PEEK
This commit is contained in:
@@ -74,15 +74,6 @@ class UdpRxSocket {
|
|||||||
buff = new char[packet_size];
|
buff = new char[packet_size];
|
||||||
}
|
}
|
||||||
|
|
||||||
// // Delegating constructor to allow drop in replacement for old socket class
|
|
||||||
// // This one might be removed in the future
|
|
||||||
// UdpRxSocket(unsigned short int const port_number,
|
|
||||||
// genericSocket::communicationProtocol p,
|
|
||||||
// int ps = DEFAULT_PACKET_SIZE, const char *eth = NULL,
|
|
||||||
// int hsize = 0, uint64_t buf_size = SOCKET_BUFFER_SIZE)
|
|
||||||
// : UdpRxSocket(port_number, ps, InterfaceNameToIp(eth).str().c_str(),
|
|
||||||
// buf_size) {}
|
|
||||||
|
|
||||||
~UdpRxSocket() {
|
~UdpRxSocket() {
|
||||||
delete[] buff;
|
delete[] buff;
|
||||||
Shutdown();
|
Shutdown();
|
||||||
@@ -93,12 +84,16 @@ class UdpRxSocket {
|
|||||||
|
|
||||||
bool ReceivePacket() noexcept { return ReceivePacket(buff); }
|
bool ReceivePacket() noexcept { return ReceivePacket(buff); }
|
||||||
|
|
||||||
bool ReceivePacket(char *dst) noexcept {
|
bool ReceivePacket(char *dst, int flags = 0) noexcept {
|
||||||
auto bytes_received =
|
auto bytes_received =
|
||||||
recvfrom(fd, dst, packet_size, 0, nullptr, nullptr);
|
recvfrom(fd, dst, packet_size, flags, nullptr, nullptr);
|
||||||
return bytes_received == packet_size;
|
return bytes_received == packet_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PeekPacket() noexcept{
|
||||||
|
return ReceivePacket(buff, MSG_PEEK);
|
||||||
|
}
|
||||||
|
|
||||||
// Only for backwards compatibility this function will be removed during
|
// Only for backwards compatibility this function will be removed during
|
||||||
// refactoring of the receiver
|
// refactoring of the receiver
|
||||||
ssize_t ReceiveDataOnly(char *dst) {
|
ssize_t ReceiveDataOnly(char *dst) {
|
||||||
|
|||||||
@@ -106,4 +106,30 @@ TEST_CASE("Receive an int to an external buffer"){
|
|||||||
write(fd, &to_send, sizeof(to_send));
|
write(fd, &to_send, sizeof(to_send));
|
||||||
CHECK(s.ReceivePacket(reinterpret_cast<char*>(&received)));
|
CHECK(s.ReceivePacket(reinterpret_cast<char*>(&received)));
|
||||||
CHECK(received == to_send);
|
CHECK(received == to_send);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TEST_CASE("PEEK data"){
|
||||||
|
int to_send = 5;
|
||||||
|
int to_send2 = 12;
|
||||||
|
int received = -1;
|
||||||
|
auto fd = open_socket(default_port);
|
||||||
|
sls::UdpRxSocket s(default_port, sizeof(int));
|
||||||
|
write(fd, &to_send, sizeof(to_send));
|
||||||
|
write(fd, &to_send2, sizeof(to_send));
|
||||||
|
CHECK(s.PeekPacket());
|
||||||
|
memcpy(&received, s.LastPacket(), sizeof(int));
|
||||||
|
CHECK(received == to_send);
|
||||||
|
|
||||||
|
CHECK(s.PeekPacket());
|
||||||
|
memcpy(&received, s.LastPacket(), sizeof(int));
|
||||||
|
CHECK(received == to_send);
|
||||||
|
|
||||||
|
CHECK(s.ReceivePacket());
|
||||||
|
memcpy(&received, s.LastPacket(), sizeof(int));
|
||||||
|
CHECK(received == to_send);
|
||||||
|
|
||||||
|
CHECK(s.ReceivePacket());
|
||||||
|
memcpy(&received, s.LastPacket(), sizeof(int));
|
||||||
|
CHECK(received == to_send2);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user