1 #include "otsdaq-core/NetworkUtilities/TransmitterSocket.h"
2 #include "otsdaq-core/MessageFacility/MessageFacility.h"
3 #include "otsdaq-core/Macros/CoutHeaderMacros.h"
12 TransmitterSocket::TransmitterSocket(
void)
14 __COUT__ << std::endl;
18 TransmitterSocket::TransmitterSocket(
const std::string &IPAddress,
unsigned int port)
21 __COUT__ << std::endl;
25 TransmitterSocket::~TransmitterSocket(
void)
29 int TransmitterSocket::send(
Socket& toSocket,
const std::string& buffer,
34 std::lock_guard<std::mutex> lock(sendMutex_);
40 constexpr
size_t MAX_SEND_SIZE = 65500;
44 while (offset < buffer.size() && sts > 0)
46 auto thisSize = buffer.size() - offset > MAX_SEND_SIZE ? MAX_SEND_SIZE : buffer.size() - offset;
50 __COUT__ <<
"Sending " <<
51 " from: " << getIPAddress() <<
52 ":" << ntohs(socketAddress_.sin_port) <<
53 " to: " << toSocket.getIPAddress() <<
54 ":" << ntohs(toSocket.getSocketAddress().sin_port) <<
55 " size: " << thisSize <<
" remaining = " << (buffer.size() - offset - thisSize) << std::endl;
74 sts = sendto(socketNumber_, buffer.c_str() + offset, thisSize, 0, (
struct sockaddr *)&(toSocket.getSocketAddress()),
sizeof(sockaddr_in));
80 __COUT__ <<
"Error writing buffer for port " << ntohs(socketAddress_.sin_port) <<
": " << strerror(errno) << std::endl;
87 int TransmitterSocket::send(
Socket& toSocket,
const std::vector<uint16_t>& buffer,
92 std::lock_guard<std::mutex> lock(sendMutex_);
98 constexpr
size_t MAX_SEND_SIZE = 1500;
102 while (offset < buffer.size() && sts > 0)
104 auto thisSize = 2 * (buffer.size() - offset) > MAX_SEND_SIZE ? MAX_SEND_SIZE : 2 * (buffer.size() - offset);
105 sts = sendto(socketNumber_, &buffer[0] + offset, thisSize, 0, (
struct sockaddr *)&(toSocket.getSocketAddress()),
sizeof(sockaddr_in));
111 __COUT__ <<
"Error writing buffer for port " << ntohs(socketAddress_.sin_port) <<
": " << strerror(errno) << std::endl;
118 int TransmitterSocket::send(
Socket& toSocket,
const std::vector<uint32_t>& buffer,
122 std::lock_guard<std::mutex> lock(sendMutex_);
128 if (sendto(socketNumber_, &buffer[0], buffer.size() *
sizeof(uint32_t), 0, (
struct sockaddr *)&(toSocket.getSocketAddress()),
sizeof(sockaddr_in)) < (
int)(buffer.size() *
sizeof(uint32_t)))
130 __COUT__ <<
"Error writing buffer for port " << ntohs(socketAddress_.sin_port) << std::endl;