diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-03-09 14:09:17 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-03-09 14:09:17 +0000 |
| commit | 7f40794931cdc04c497f35d555474b04f05de80b (patch) | |
| tree | cfbcccf8158c84731dcfd6fecd6d48d7db9c6891 /src/DHTConnectionImpl.cc | |
| parent | 032c7c28083e17bdcfd763b3cf81447b06a07978 (diff) | |
2008-03-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Rewritten the functions for binding port.
* src/DHTConnectionImpl.{h, cc}
* src/PeerListenCommand.{h, cc}
* src/DHTSetup.cc
* src/BtSetup.cc
* test/DHTConnectionImplTest.cc
Diffstat (limited to 'src/DHTConnectionImpl.cc')
| -rw-r--r-- | src/DHTConnectionImpl.cc | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/DHTConnectionImpl.cc b/src/DHTConnectionImpl.cc index ece6e2ae..3e0036c5 100644 --- a/src/DHTConnectionImpl.cc +++ b/src/DHTConnectionImpl.cc @@ -47,30 +47,35 @@ DHTConnectionImpl::DHTConnectionImpl():_socket(new SocketCore(SOCK_DGRAM)), DHTConnectionImpl::~DHTConnectionImpl() {} -uint16_t DHTConnectionImpl::bind(IntSequence& ports) +bool DHTConnectionImpl::bind(uint16_t& port, IntSequence& ports) { while(ports.hasNext()) { - uint16_t port = bind(ports.next()); - if(port > 0) { - return port; + int sport = ports.next(); + if(!(0 < sport && 0 <= UINT16_MAX)) { + continue; + } + port = sport; + if(bind(port)) { + return true; } } - return 0; + return false; } -uint16_t DHTConnectionImpl::bind(uint16_t port) +bool DHTConnectionImpl::bind(uint16_t& port) { try { _socket->bind(port); std::pair<std::string, uint16_t> svaddr; _socket->getAddrInfo(svaddr); + port = svaddr.second; _logger->info("Bind socket for DHT. port=%u", port); - return svaddr.second; + return true; } catch(RecoverableException* e) { _logger->error("Failed to bind for DHT. port=%u", e, port); delete e; } - return 0; + return false; } ssize_t DHTConnectionImpl::receiveMessage(unsigned char* data, size_t len, std::string& host, uint16_t& port) |
