void TcpListener::incomingConnection(qintptr handle) { // qDebug("TcpListener::incomingConnection"); // SocketHandler * s = new SocketHandler(); // s->CreateSocket(); // s->SetSocketDescriptor(handle); void * tmp = (void *)handle; emit newSocketHandler(tmp); }
// ---------------------------------------- void BindedHandler::pollRead() { static socklen_t len = sizeof(struct sockaddr_in); sockaddr_in address; // Check limit if (sockets.size() >= maxConn) { Common::Logger::critical("Too many connections on Port %d", port); acceptConnections(0); return; } // Try to accept connection int clientFd = ::accept(socketFd, (sockaddr *) &address, &len); char buf[30]; Tools::IP::sprintfAddress(buf, address); Common::Logger::debug("New connection from %s", buf); // Error? if (clientFd == -1) { if (errno == EAGAIN) { return; } else if (errno == EMFILE) { perror("Error on accept"); acceptConnections(0); return; } else { perror("Error on accept"); return; } } SocketHandler* userData = newSocketHandler(address); // Non allowed address? if (userData == NULL) { Common::Logger::critical("Paff! %s", buf); close(clientFd); return; } // Add to epoll userData->socketFd = clientFd; ((BufferedSocketHandler*) userData)->parentHandler = this; userData->socketAddress = address.sin_addr.s_addr; Tools::IP::sprintfAddress(userData->socketAddressStr, address); sockets.push_front(userData); userData->registerEvents(10); }