diff --git a/ktorrent/core.h b/ktorrent/core.h --- a/ktorrent/core.h +++ b/ktorrent/core.h @@ -235,7 +235,7 @@ QString locationHint(const QString& group) const; void startServers(); void startTCPServer(bt::Uint16 port); - void startUTPServer(bt::Uint16 port); + bool startUTPServer(bt::Uint16 port); bt::TorrentInterface* loadFromFile(const QString& file, const QString& dir, const QString& group, bool silently); bt::TorrentInterface* loadFromData(const QByteArray& data, const QString& dir, const QString& group, bool silently, const QUrl& url); diff --git a/ktorrent/core.cpp b/ktorrent/core.cpp --- a/ktorrent/core.cpp +++ b/ktorrent/core.cpp @@ -174,7 +174,7 @@ } } - void Core::startUTPServer(bt::Uint16 port) + bool Core::startUTPServer(bt::Uint16 port) { if (Globals::instance().initUTPServer(port)) { @@ -185,7 +185,9 @@ gui->errorMsg(i18n("KTorrent is unable to accept connections because the UDP port %1 is " "already in use by another program.", port)); Out(SYS_GEN | LOG_IMPORTANT) << "Cannot find free UDP port" << endl; + return false; } + return true; } @@ -207,12 +209,10 @@ else if (tcp_enabled && port != current_port) globals.getTCPServer().changePort(port); - if (globals.isUTPEnabled() && !utp_enabled) + if (globals.isUTPEnabled() && (!utp_enabled || port != current_port) ) globals.shutdownUTPServer(); - else if (!globals.isUTPEnabled() && utp_enabled) + if (!globals.isUTPEnabled() && utp_enabled) startUTPServer(port); - else if (utp_enabled && port != current_port) - globals.getUTPServer().changePort(port); if (utp_enabled) globals.getUTPServer().setTOS(Settings::dscp() << 2); @@ -1103,20 +1103,22 @@ bool Core::changePort(Uint16 port) { + bt::Globals& globals = bt::Globals::instance(); bool ok = false; if (Settings::utpEnabled()) { - utp::UTPServer& utp_srv = Globals::instance().getUTPServer(); - ok = utp_srv.changePort(port); + globals.shutdownUTPServer(); + ok = startUTPServer(port); + if (!Settings::onlyUseUtp()) { - bt::Server& srv = Globals::instance().getTCPServer(); + bt::Server& srv = globals.getTCPServer(); ok = ok && srv.changePort(port); } } else { - bt::Server& srv = Globals::instance().getTCPServer(); + bt::Server& srv = globals.getTCPServer(); ok = srv.changePort(port); }