TCPTestServer::TCPTestServer(const QByteArray &toSend, QObject *parent) :
    QObject(parent), _toSend(toSend)
{
    _server = new QTcpServer(this);
    _server->listen(QHostAddress::Any,
                    0);

    connect(_server.data(),
            SIGNAL(newConnection()),
            this,
            SLOT(handleIncomingConnection()));
}
TCPTestServer::TCPTestServer(int size, QObject *parent) :
    QObject(parent)
{
    _server = new QTcpServer(this);
    _server->listen(QHostAddress::Any,
                    0);

    connect(_server.data(),
            SIGNAL(newConnection()),
            this,
            SLOT(handleIncomingConnection()));

    this->generateRandomToSend(size);
}
Example #3
0
int main(int argc, char** argv)
{
	int socketFd;
	int clientFd;
	int retVal;
	int one = 1;
	struct sockaddr_in serverSocketAddress;
	socklen_t socket_length;
	int c;
	int serverPort = 0;
	int pid;
     
	while ((c = getopt (argc, argv, "hp:")) != -1)
	{
		switch (c)
		{
			case 'h':
				usage();
				return 1;
			case 'p':
				serverPort = atoi(optarg);
				break;
			case '?':
			default:
				usage();
				return 1;
		}
	}

	if (!serverPort)
	{
		fprintf(stdout, "-p port not specified\n");
		usage();
		return 1;
	}

	receiveBuffer = malloc(SERVER_APPLICATION_RECEIVE_BUF_SIZE);
	if (!receiveBuffer)
	{
		fprintf(stdout, "failed allocating memory for application receive buffer\n");
		return 1;
	}

	socketFd = socket(PF_INET, SOCK_STREAM, 0); 

	if (socketFd < 0)
	{ 
		perror("Socket creation failed");
		return 1;
	}   

	retVal = setsockopt(socketFd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
	if (retVal)
	{
		perror("Could not set SO_REUSEADDR on socket");
		return 1;
	}

	memset(&serverSocketAddress, 0, sizeof(struct sockaddr_in));
	serverSocketAddress.sin_family = AF_INET;
	serverSocketAddress.sin_addr.s_addr = htonl(INADDR_ANY);
	serverSocketAddress.sin_port = htons(serverPort);

	retVal = bind(socketFd,(struct sockaddr *)&serverSocketAddress, sizeof(serverSocketAddress));
	if (retVal)
	{
		perror("Could not bind port");
		return 1;
	}

	retVal = listen(socketFd, SOMAXCONN);
  	if (retVal < 0)
	{
		perror("listen system call failed");
  		return 1;
  	}

	pid = fork();
	if (pid < 0) 
	{ 
		perror("error forking process for incoming connection");
		return 1;
	}
	if (pid > 0)
	{ 
		return 0; // we exit the parent cleanly and leave the child process open as a listening server
	}

	socket_length = sizeof(serverSocketAddress);
	while(1)
	{
		clientFd = accept(socketFd, (struct sockaddr *)&serverSocketAddress, &socket_length);
		if (clientFd < 0)
		{
			perror("error from accept call on server");
			return 1;
		}

		pid = fork();
		if (pid < 0) 
		{ 
			perror("error forking process for incoming connection");
			return 1;
		}
		if (pid == 0)
		{ 
			handleIncomingConnection(clientFd);
		}
	}

	return 0;
}