import of enigma2
[openblackhole/openblackhole-enigma2.git] / lib / network / serversocket.cpp
1 #include <lib/network/serversocket.h>
2
3 bool eServerSocket::ok()
4 {
5         return okflag;
6 }
7
8 void eServerSocket::notifier(int)
9 {
10         int clientfd, clientlen;
11         struct sockaddr_in client_addr;
12
13         eDebug("[SERVERSOCKET] incoming connection!");
14
15         clientlen=sizeof(client_addr);
16         clientfd=accept(getDescriptor(),
17                         (struct sockaddr *) &client_addr,
18                         (socklen_t*)&clientlen);
19         if(clientfd<0)
20                 eDebug("[SERVERSOCKET] error on accept()");
21
22         newConnection(clientfd);
23 }
24
25 eServerSocket::eServerSocket(int port, eMainloop *ml): eSocket(ml)
26 {
27         struct sockaddr_in serv_addr;
28
29         serv_addr.sin_family=AF_INET;
30         serv_addr.sin_addr.s_addr=INADDR_ANY;
31         serv_addr.sin_port=htons(port);
32
33         okflag=1;
34         int val=1;
35         
36         setsockopt(getDescriptor(), SOL_SOCKET, SO_REUSEADDR, &val, 4);
37
38         if(bind(getDescriptor(),
39                 (struct sockaddr *) &serv_addr,
40                 sizeof(serv_addr))<0)
41         {
42                 eDebug("[SERVERSOCKET] ERROR on bind() (%m)");
43                 okflag=0;
44         }
45         listen(getDescriptor(), 0);
46
47         rsn->setRequested(eSocketNotifier::Read);
48 }
49
50 eServerSocket::~eServerSocket()
51 {
52 #if 0
53         eDebug("[SERVERSOCKET] destructed");
54 #endif
55 }