aboutsummaryrefslogtreecommitdiff
path: root/lib/network/serversocket.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2003-10-17 15:35:43 +0000
committerFelix Domke <tmbinc@elitedvb.net>2003-10-17 15:35:43 +0000
commitfc2f5b2cd655f1391f2abda1b39e37cdec98a951 (patch)
tree312efcea86a319de407a7c314fb981fb1c71019a /lib/network/serversocket.cpp
downloadenigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.tar.gz
enigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.zip
Initial revision
Diffstat (limited to 'lib/network/serversocket.cpp')
-rw-r--r--lib/network/serversocket.cpp55
1 files changed, 55 insertions, 0 deletions
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 <lib/network/serversocket.h>
+
+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
+}