void TcpListener::incomingConnection(qintptr handle)
{
//    qDebug("TcpListener::incomingConnection");
//    SocketHandler * s = new SocketHandler();
//    s->CreateSocket();
//    s->SetSocketDescriptor(handle);
    void * tmp = (void *)handle;
    emit newSocketHandler(tmp);

}
Пример #2
0
	// ----------------------------------------
	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);
	}