diff options
author | dknn <yoann.blein@free.fr> | 2012-07-16 12:00:56 (GMT) |
---|---|---|
committer | dknn <yoann.blein@free.fr> | 2012-09-22 09:01:49 (GMT) |
commit | 292967c02ffc2ff0b53df526af2965a03916290c (patch) | |
tree | 6712ee7c70d4a68af1cd7e46f6929f4bfce2f27d /Swiften/Network/BoostUDPSocket.cpp | |
parent | 05ef8661b2f42cc5b889f3900b459d8a49a24db3 (diff) | |
download | swift-contrib-292967c02ffc2ff0b53df526af2965a03916290c.zip swift-contrib-292967c02ffc2ff0b53df526af2965a03916290c.tar.bz2 |
Better handling of udp bind errors
Diffstat (limited to 'Swiften/Network/BoostUDPSocket.cpp')
-rw-r--r-- | Swiften/Network/BoostUDPSocket.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/Swiften/Network/BoostUDPSocket.cpp b/Swiften/Network/BoostUDPSocket.cpp index 4405091..0f66b92 100644 --- a/Swiften/Network/BoostUDPSocket.cpp +++ b/Swiften/Network/BoostUDPSocket.cpp @@ -52,16 +52,22 @@ BoostUDPSocket::~BoostUDPSocket() { } -void BoostUDPSocket::bind(const HostAddressPort& addr) +int BoostUDPSocket::bind(const HostAddressPort& addr) { if (!socket_.is_open()) socket_.open(addr.toEndpoint().protocol()); - socket_.bind(addr.toEndpoint()); + + boost::system::error_code errorCode; + socket_.bind(addr.toEndpoint(), errorCode); + if (errorCode) + return 0; + + return socket_.local_endpoint().port(); } -void BoostUDPSocket::bindOnAvailablePort(const HostAddress &addr) +int BoostUDPSocket::bindOnAvailablePort(const HostAddress& addr) { - bind(HostAddressPort(addr, 0)); + return bind(HostAddressPort(addr, 0)); } void BoostUDPSocket::listen() @@ -70,7 +76,7 @@ void BoostUDPSocket::listen() doRead(); } -void BoostUDPSocket::connect(const HostAddressPort &address) +void BoostUDPSocket::connect(const HostAddressPort& address) { // if (!socket_.is_open()) // socket_.open(boost::asio::ip::udp::v4()); |