From fc2f5b2cd655f1391f2abda1b39e37cdec98a951 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 17 Oct 2003 15:35:43 +0000 Subject: Initial revision --- lib/network/serversocket.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 lib/network/serversocket.cpp (limited to 'lib/network/serversocket.cpp') diff --git a/lib/network/serversocket.cpp b/lib/network/serversocket.cpp new file mode 100644 index 00000000..fe2737eb --- /dev/null +++ b/lib/network/serversocket.cpp @@ -0,0 +1,55 @@ +#include + +bool eServerSocket::ok() +{ + return okflag; +} + +void eServerSocket::notifier(int) +{ + int clientfd, clientlen; + struct sockaddr_in client_addr; + + eDebug("[SERVERSOCKET] incoming connection!"); + + clientlen=sizeof(client_addr); + clientfd=accept(getDescriptor(), + (struct sockaddr *) &client_addr, + (socklen_t*)&clientlen); + if(clientfd<0) + eDebug("[SERVERSOCKET] error on accept()"); + + newConnection(clientfd); +} + +eServerSocket::eServerSocket(int port, eMainloop *ml): eSocket(ml) +{ + struct sockaddr_in serv_addr; + + serv_addr.sin_family=AF_INET; + serv_addr.sin_addr.s_addr=INADDR_ANY; + serv_addr.sin_port=htons(port); + + okflag=1; + int val=1; + + setsockopt(getDescriptor(), SOL_SOCKET, SO_REUSEADDR, &val, 4); + + if(bind(getDescriptor(), + (struct sockaddr *) &serv_addr, + sizeof(serv_addr))<0) + { + eDebug("[SERVERSOCKET] ERROR on bind() (%m)"); + okflag=0; + } + listen(getDescriptor(), 0); + + rsn->setRequested(eSocketNotifier::Read); +} + +eServerSocket::~eServerSocket() +{ +#if 0 + eDebug("[SERVERSOCKET] destructed"); +#endif +} -- cgit v1.2.3