summaryrefslogtreecommitdiff
path: root/src/DHTConnectionImpl.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-03-09 14:09:17 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-03-09 14:09:17 +0000
commit7f40794931cdc04c497f35d555474b04f05de80b (patch)
treecfbcccf8158c84731dcfd6fecd6d48d7db9c6891 /src/DHTConnectionImpl.cc
parent032c7c28083e17bdcfd763b3cf81447b06a07978 (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.cc21
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)