1 #include "otsdaq/NetworkUtilities/TransceiverSocket.h"
2 #include "otsdaq/Macros/CoutMacros.h"
3 #include "otsdaq/MessageFacility/MessageFacility.h"
10 TransceiverSocket::TransceiverSocket(
void)
12 __COUT__ <<
"TransceiverSocket constructor " << __E__;
16 TransceiverSocket::TransceiverSocket(std::string IPAddress,
unsigned int port)
19 __COUT__ <<
"TransceiverSocket constructor " << IPAddress <<
":" << port << __E__;
23 TransceiverSocket::~TransceiverSocket(
void) {}
30 std::lock_guard<std::mutex> lock(sendMutex_);
33 __COUT__ <<
"Acknowledging on Socket Descriptor #: " << socketNumber_
34 <<
" from-port: " << ntohs(socketAddress_.sin_port)
35 <<
" to-port: " << ntohs(ReceiverSocket::fromAddress_.sin_port)
38 constexpr
size_t MAX_SEND_SIZE = 1500;
44 while(offset < buffer.size() && sendToSize > 0)
46 auto thisSize = sizeInBytes * (buffer.size() - offset) > MAX_SEND_SIZE
48 : sizeInBytes * (buffer.size() - offset);
51 sendToSize = sendto(socketNumber_,
55 (
struct sockaddr*)&(ReceiverSocket::fromAddress_),
57 offset += sendToSize / sizeInBytes;
62 __SS__ <<
"Error writing buffer from port "
63 << ntohs(TransmitterSocket::socketAddress_.sin_port) <<
": "
64 << strerror(errno) << std::endl;
72 std::string TransceiverSocket::sendAndReceive(
Socket& toSocket,
73 const std::string& sendBuffer,
74 unsigned int timeoutSeconds ,
75 unsigned int timeoutUSeconds ,
78 send(toSocket, sendBuffer, verbose);
79 std::string receiveBuffer;
80 if(receive(receiveBuffer, timeoutSeconds, timeoutUSeconds, verbose) < 0)
82 __SS__ <<
"Timeout (" << timeoutSeconds + timeoutUSeconds / 1000000.
83 <<
" s) or Error receiving response buffer from remote ip:port "
84 << toSocket.getIPAddress() <<
":" << toSocket.getPort()
85 <<
" to this ip:port " << Socket::getIPAddress() <<
":"
86 << Socket::getPort() << __E__;
91 std::string receiveBuffer2;
92 while(receive(receiveBuffer2,
94 (timeoutSeconds == 0 && timeoutUSeconds < 200000)
99 receiveBuffer += receiveBuffer2;
102 return receiveBuffer;
int acknowledge(const std::string &buffer, bool verbose=false)
responds to last receive location