summaryrefslogtreecommitdiff
path: root/i/simulotron/src/socket/socket_server.cc
diff options
context:
space:
mode:
Diffstat (limited to 'i/simulotron/src/socket/socket_server.cc')
-rw-r--r--i/simulotron/src/socket/socket_server.cc40
1 files changed, 27 insertions, 13 deletions
diff --git a/i/simulotron/src/socket/socket_server.cc b/i/simulotron/src/socket/socket_server.cc
index 662abe0..b5a511e 100644
--- a/i/simulotron/src/socket/socket_server.cc
+++ b/i/simulotron/src/socket/socket_server.cc
@@ -32,18 +32,15 @@
SocketServer::SocketServer (const Address & address)
{
- static const int reuse_s = 1;
- // Crée le file descriptor du socket
- socket_ = socket (PF_INET, SOCK_STREAM, 0);
- if (socket_ < 0)
- throw errno_exception ("La chaussette n'a pas pu être tricoté", errno);
- // On règle la réusabilité du socket
- if (setsockopt (socket_, SOL_SOCKET, SO_REUSEADDR,
- &reuse_s, sizeof (int)) == -1)
- throw errno_exception ("Erreur setsockopt : reusable", errno);
- // On bind le socket
- if (::bind (socket_, address.getSockaddr (), sizeof (*address.getSockaddr ())) < 0)
- throw errno_exception ("Impossible d'assigner la chausette", errno);
+ initSocket(address);
+}
+
+SocketServer::SocketServer (const std::string & address, int port)
+{
+ if(address.empty())
+ initSocket(Address(port));
+ else
+ initSocket(Address(address, port));
}
SocketServer::~SocketServer (void)
@@ -70,7 +67,24 @@ SocketServer::accept (void)
}
int
-SocketServer::getFD (void)
+SocketServer::getFD (void) const
{
return socket_;
}
+
+void
+SocketServer::initSocket(const Address & address)
+{
+ static const int reuse_s = 1;
+ // Crée le file descriptor du socket
+ socket_ = socket (PF_INET, SOCK_STREAM, 0);
+ if (socket_ < 0)
+ throw errno_exception ("La chaussette n'a pas pu être tricoté", errno);
+ // On règle la réusabilité du socket
+ if (setsockopt (socket_, SOL_SOCKET, SO_REUSEADDR,
+ &reuse_s, sizeof (int)) == -1)
+ throw errno_exception ("Erreur setsockopt : reusable", errno);
+ // On bind le socket
+ if (::bind (socket_, address.getSockaddr (), sizeof (*address.getSockaddr ())) < 0)
+ throw errno_exception ("Impossible d'assigner la chausette", errno);
+}