summaryrefslogtreecommitdiff
path: root/i/simulotron/src/socket/socket.cc
diff options
context:
space:
mode:
Diffstat (limited to 'i/simulotron/src/socket/socket.cc')
-rw-r--r--i/simulotron/src/socket/socket.cc22
1 files changed, 19 insertions, 3 deletions
diff --git a/i/simulotron/src/socket/socket.cc b/i/simulotron/src/socket/socket.cc
index b696690..0e7f819 100644
--- a/i/simulotron/src/socket/socket.cc
+++ b/i/simulotron/src/socket/socket.cc
@@ -22,10 +22,22 @@ Socket::Socket(int socket)
socket_ = socket;
}
+Socket::Socket(Socket & socket)
+{
+ socket_ = socket.socket_;
+ socket.socket_ = -1;
+}
+
Socket::~Socket(void)
{
- // XXX Pas faisable car les copy détruise les socket
- //close(socket_);
+ if(socket_ >= 0)
+ ::close(socket_);
+}
+
+Socket & Socket::operator= (Socket & socket)
+{
+ socket_ = socket.socket_;
+ socket.socket_ = -1;
}
void Socket::connect(const Address & address)
@@ -46,7 +58,6 @@ Socket Socket::accept(Address & address)
socklen_t length = sizeof(sockaddr_in);
int socket = ::accept(socket_, &addr, &length);
-
if (socket < 0)
throw errno_exception("Chaussette bloqué à la douane", errno);
address = Address(&addr, length);
@@ -104,3 +115,8 @@ void Socket::putChar(char c)
{
::write(socket_, &c, 1);
}
+
+int Socket::getFD(void)
+{
+ return socket_;
+}