2018-12-28 18:12:45 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <utils/Logger.h>
|
|
|
|
|
|
|
|
#include <QTcpServer>
|
|
|
|
|
|
|
|
namespace NetUtils {
|
|
|
|
///
|
|
|
|
/// @brief Check if the port is available for listening
|
|
|
|
/// @param[in/out] port The port to test, will be incremented if port is in use
|
|
|
|
/// @param log The logger of the caller to print
|
|
|
|
/// @return True on success else false
|
|
|
|
///
|
2019-06-05 18:19:08 +02:00
|
|
|
static bool portAvailable(quint16& port, Logger* log)
|
2018-12-28 18:12:45 +01:00
|
|
|
{
|
|
|
|
const quint16 prevPort = port;
|
|
|
|
QTcpServer server;
|
|
|
|
bool corrected = false;
|
|
|
|
while (!server.listen(QHostAddress::Any, port))
|
|
|
|
{
|
|
|
|
corrected = true;
|
|
|
|
Warning(log,"Port '%d' is already in use, will increment", port);
|
|
|
|
port ++;
|
|
|
|
}
|
|
|
|
server.close();
|
|
|
|
if(corrected)
|
|
|
|
{
|
|
|
|
Warning(log, "The requested Port '%d' was already in use, will use Port '%d' instead", prevPort, port);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|