otsdaq  v2_04_02
TCPTransmitterSocket.cc
1 #include "otsdaq/NetworkUtilities/TCPTransmitterSocket.h"
2 #include <string.h>
3 #include <sys/socket.h>
4 #include <unistd.h>
5 #include <stdexcept>
6 #include "otsdaq/NetworkUtilities/TCPPacket.h"
7 //#include <iostream>
8 
9 using namespace ots;
10 
11 //========================================================================================================================
12 TCPTransmitterSocket::TCPTransmitterSocket(int socketId) : TCPSocket(socketId) {}
13 
14 //========================================================================================================================
15 TCPTransmitterSocket::~TCPTransmitterSocket(void) {}
16 
17 //========================================================================================================================
18 void TCPTransmitterSocket::sendPacket(const std::string& buffer)
19 {
20  send(TCPPacket::encode(buffer));
21 }
22 
23 //========================================================================================================================
24 void TCPTransmitterSocket::send(char const* buffer, std::size_t size)
25 {
26  std::size_t put = write(getSocketId(), buffer, size);
27  if(put == static_cast<std::size_t>(-1))
28  {
29  switch(errno)
30  {
31  // case EINVAL:
32  // case EBADF:
33  // case ECONNRESET:
34  // case ENXIO:
35  case EPIPE:
36  {
37  // Fatal error. Programming bug
38  throw std::domain_error(std::string("Write: critical error: ") +
39  strerror(errno));
40  }
41  // case EDQUOT:
42  // case EFBIG:
43  // case EIO:
44  // case ENETDOWN:
45  // case ENETUNREACH:
46  case ENOSPC:
47  {
48  // Resource acquisition failure or device error
49  throw std::runtime_error(std::string("Write: resource failure: ") +
50  strerror(errno));
51  }
52  case EINTR:
53  break;
54  // TODO: Check for user interrupt flags.
55  // Beyond the scope of this project
56  // so continue normal operations.
57  case EAGAIN:
58  {
59  // Temporary error.
60  throw std::runtime_error(std::string("Write: temporary error: ") +
61  strerror(errno));
62  }
63  default:
64  {
65  throw std::runtime_error(std::string("Write: returned -1: ") +
66  strerror(errno));
67  }
68  }
69  }
70 }
71 
72 //========================================================================================================================
73 void TCPTransmitterSocket::send(const std::string& buffer)
74 {
75  send(&buffer.at(0), buffer.size());
76 }
77 
78 //========================================================================================================================
79 void TCPTransmitterSocket::send(const std::vector<char>& buffer)
80 {
81  send(&buffer.at(0), buffer.size());
82 }