2 #include <lib/network/serversocket.h>
5 bool eServerSocket::ok()
10 void eServerSocket::notifier(int)
12 int clientfd, clientlen;
13 struct sockaddr_in client_addr;
15 #ifdef DEBUG_SERVERSOCKET
16 eDebug("[eServerSocket] incoming connection!");
19 clientlen=sizeof(client_addr);
20 clientfd=accept(getDescriptor(),
21 (struct sockaddr *) &client_addr,
22 (socklen_t*)&clientlen);
24 eDebug("[eServerSocket] error on accept: %m");
26 strRemoteHost = inet_ntoa(client_addr.sin_addr);
27 newConnection(clientfd);
30 eServerSocket::eServerSocket(int port, eMainloop *ml): eSocket(ml)
32 struct sockaddr_in serv_addr;
35 bzero(&serv_addr, sizeof(serv_addr));
36 serv_addr.sin_family=AF_INET;
37 serv_addr.sin_addr.s_addr=INADDR_ANY;
38 serv_addr.sin_port=htons(port);
43 setsockopt(getDescriptor(), SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
45 if(bind(getDescriptor(),
46 (struct sockaddr *) &serv_addr,
49 eDebug("[eServerSocket] ERROR on bind: %m");
52 listen(getDescriptor(), 0);
54 rsn->setRequested(eSocketNotifier::Read);
57 eServerSocket::eServerSocket(std::string path, eMainloop *ml) : eSocket(ml, AF_LOCAL)
59 struct sockaddr_un serv_addr;
62 memset(&serv_addr, 0, sizeof(serv_addr));
63 serv_addr.sun_family = AF_LOCAL;
64 strcpy(serv_addr.sun_path, path.c_str());
69 if(bind(getDescriptor(),
70 (struct sockaddr *) &serv_addr,
73 eDebug("[eServerSocket] ERROR on bind: %m");
76 listen(getDescriptor(), 0);
78 rsn->setRequested(eSocketNotifier::Read);
81 eServerSocket::~eServerSocket()
84 eDebug("[eServerSocket] destructed");
88 int eServerSocket::bind(int sockfd, struct sockaddr *addr, socklen_t addrlen)
93 if ((result = ::bind(sockfd, addr, addrlen)) < 0 && errno == EINTR) continue;
99 int eServerSocket::listen(int sockfd, int backlog)
104 if ((result = ::listen(sockfd, backlog)) < 0 && errno == EINTR) continue;
110 int eServerSocket::accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
115 if ((result = ::accept(sockfd, addr, addrlen)) < 0 && errno == EINTR) continue;