1 #include "otsdaq/NetworkUtilities/TCPReceiverSocket.h"
2 #include <sys/socket.h>
10 TCPReceiverSocket::TCPReceiverSocket(
int socketId) :
TCPSocket(socketId)
16 TCPReceiverSocket::~TCPReceiverSocket(
void) {}
19 std::string TCPReceiverSocket::receivePacket(
void)
23 std::string retVal =
"";
24 if(fPacket.decode(retVal))
26 fPacket += receive<std::string>();
31 std::size_t TCPReceiverSocket::receive(
char* buffer, std::size_t bufferSize)
35 if(getSocketId() == 0)
37 throw std::logic_error(
"Bad socket object (this object was moved)");
39 std::size_t dataRead = ::read(getSocketId(), buffer, bufferSize);
40 if(dataRead == static_cast<std::size_t>(-1))
42 std::stringstream error;
47 <<
"Socket file descriptor " << getSocketId()
48 <<
" is not a valid file descriptor or is not open for reading...Errno: "
52 error <<
"Buffer is outside your accessible address space...Errno: " << errno;
57 error <<
"Read critical error caused by a programming bug...Errno: " << errno;
58 throw std::domain_error(error.str());
64 error <<
"The call was interrupted by a signal before any data was "
72 std::cout << __PRETTY_FUNCTION__
73 <<
"Read returned EAGAIN error which means that the read was "
74 "temporarily broken. If this continues it is a problem because "
75 "I am in a recursive loop!"
77 dataRead = receive(buffer, bufferSize);
89 error <<
"Read: returned -1...Errno: " << errno;
92 throw std::runtime_error(error.str());