1 #include "otsdaq-core/NetworkUtilities/TransmitterSocket.h"
2 #include "otsdaq-core/MessageFacility/MessageFacility.h"
3 #include "otsdaq-core/Macros/CoutMacros.h"
12 TransmitterSocket::TransmitterSocket(
void)
14 __COUT__ <<
"TransmitterSocket constructor " << __E__;
18 TransmitterSocket::TransmitterSocket(
const std::string &IPAddress,
unsigned int port)
21 __COUT__ <<
"TransmitterSocket constructor " << IPAddress <<
":" << port << __E__;
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,
75 (
struct sockaddr *)&(toSocket.getSocketAddress()),
sizeof(sockaddr_in));
81 __COUT__ <<
"Error writing buffer for port " << ntohs(socketAddress_.sin_port) <<
": " << strerror(errno) << std::endl;
88 int TransmitterSocket::send(
Socket& toSocket,
const std::vector<uint16_t>& buffer,
93 std::lock_guard<std::mutex> lock(sendMutex_);
99 constexpr
size_t MAX_SEND_SIZE = 1500;
103 while (offset < buffer.size() && sts > 0)
105 auto thisSize = 2 * (buffer.size() - offset) > MAX_SEND_SIZE ? MAX_SEND_SIZE : 2 * (buffer.size() - offset);
106 sts = sendto(socketNumber_, &buffer[0] + offset, thisSize, 0,
107 (
struct sockaddr *)&(toSocket.getSocketAddress()),
sizeof(sockaddr_in));
113 __COUT__ <<
"Error writing buffer for port " << ntohs(socketAddress_.sin_port) <<
": " << strerror(errno) << std::endl;
120 int TransmitterSocket::send(
Socket& toSocket,
const std::vector<uint32_t>& buffer,
124 std::lock_guard<std::mutex> lock(sendMutex_);
130 if (sendto(socketNumber_, &buffer[0], buffer.size() *
sizeof(uint32_t), 0,
131 (
struct sockaddr *)&(toSocket.getSocketAddress()),
sizeof(sockaddr_in)) < (
int)(buffer.size() *
sizeof(uint32_t)))
133 __COUT__ <<
"Error writing buffer for port " << ntohs(socketAddress_.sin_port) << std::endl;