1 #include "otsdaq/NetworkUtilities/TCPTransmitterSocket.h"
3 #include <sys/socket.h>
6 #include "otsdaq/NetworkUtilities/TCPPacket.h"
12 TCPTransmitterSocket::TCPTransmitterSocket(
int socketId) :
TCPSocket(socketId) {}
15 TCPTransmitterSocket::~TCPTransmitterSocket(
void) {}
18 void TCPTransmitterSocket::sendPacket(
char const* buffer, std::size_t size)
20 send(TCPPacket::encode(buffer, size));
24 void TCPTransmitterSocket::sendPacket(
const std::string& buffer)
26 send(TCPPacket::encode(buffer));
30 void TCPTransmitterSocket::send(
char const* buffer,
32 bool forceEmptyPacket)
34 if(size == 0 && !forceEmptyPacket)
36 std::cout << __PRETTY_FUNCTION__ <<
"I am sorry but I won't send an empty packet!"
40 std::size_t sentBytes = ::send(getSocketId(), buffer, size, MSG_NOSIGNAL);
41 if(sentBytes ==
static_cast<std::size_t
>(-1))
51 throw std::runtime_error(std::string(
"Write: critical error: ") +
61 throw std::runtime_error(std::string(
"Write: resource failure: ") +
70 throw std::runtime_error(std::string(
"Write: temporary error: ") +
74 throw std::runtime_error(std::string(
"Write: returned -1: ") +
82 void TCPTransmitterSocket::send(
const std::string& buffer)
84 send(&buffer.at(0), buffer.size());
88 void TCPTransmitterSocket::send(
const std::vector<char>& buffer)
90 send(&buffer.at(0), buffer.size());
94 void TCPTransmitterSocket::send(
const std::vector<uint16_t>& buffer)
96 send((
const char*)&buffer.at(0), buffer.size());
100 void TCPTransmitterSocket::setSendTimeout(
unsigned int timeoutSeconds,
101 unsigned int timeoutMicroSeconds)
104 tv.tv_sec = timeoutSeconds;
105 tv.tv_usec = timeoutMicroSeconds;
106 setsockopt(getSocketId(), SOL_SOCKET, SO_SNDTIMEO, (
const char*)&tv,
sizeof tv);