1 #include "otsdaq/NetworkUtilities/TCPSocket.h"
3 #include <sys/socket.h>
11 TCPSocket::TCPSocket(
int socketId) : fSocketId(socketId)
13 if(socketId == invalidSocketId &&
14 (fSocketId = ::socket(PF_INET, SOCK_STREAM, 0)) == invalidSocketId)
15 throw std::runtime_error(std::string(
"Bad socket: ") + strerror(errno));
20 TCPSocket::~TCPSocket()
25 std::cout << __PRETTY_FUNCTION__ <<
"Clean close!" << std::endl;
41 void TCPSocket::close()
43 if(fSocketId == invalidSocketId)
45 throw std::logic_error(
"Bad socket object (this object was moved)");
47 int state = ::close(fSocketId);
48 std::cout << __PRETTY_FUNCTION__ <<
"Socket id: " << getSocketId()
49 <<
" close state: " << state <<
" errno: " << errno << std::endl;
51 fSocketId = invalidSocketId;
57 throw std::domain_error(std::string(
"Close: EBADF: ") +
58 std::to_string(fSocketId) +
" " + strerror(errno));
60 throw std::runtime_error(std::string(
"Close: EIO: ") +
61 std::to_string(fSocketId) +
" " + strerror(errno));
70 throw std::runtime_error(std::string(
"Close: ???: ") +
71 std::to_string(fSocketId) +
" " + strerror(errno));
80 swap(fSocketId, other.fSocketId);
84 TCPSocket::TCPSocket(
TCPSocket&& move) : fSocketId(invalidSocketId) { move.swap(*
this); }
94 void TCPSocket::sendClose()
96 if(::shutdown(getSocketId(), SHUT_WR) != 0)
98 throw std::domain_error(std::string(
"Shutdown: critical error: ") +