summaryrefslogtreecommitdiff
path: root/src/SocketCore.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-28 16:04:52 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-28 16:04:52 +0000
commit72e475dfdeaa4a87dff0eef994e7814e94c40363 (patch)
tree94a84e90c14876db223e4a733f651fe0b034f5e9 /src/SocketCore.cc
parentc342bde9627b434effbc0cd10b817670d1da0923 (diff)
2010-03-01 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Avoid to calculate end() iterator in each loop. std::deque is particularly slow. Make sure that recalculate end iterator if element is erased during loop.
Diffstat (limited to 'src/SocketCore.cc')
-rw-r--r--src/SocketCore.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/SocketCore.cc b/src/SocketCore.cc
index 3857922d..a9b019db 100644
--- a/src/SocketCore.cc
+++ b/src/SocketCore.cc
@@ -307,7 +307,8 @@ void SocketCore::bind(uint16_t port, int flags)
}
} else {
for(std::vector<std::pair<struct sockaddr_storage, socklen_t> >::
- const_iterator i = _bindAddrs.begin(); i != _bindAddrs.end(); ++i) {
+ const_iterator i = _bindAddrs.begin(), eoi = _bindAddrs.end();
+ i != eoi; ++i) {
char host[NI_MAXHOST];
int s;
s = getnameinfo(reinterpret_cast<const struct sockaddr*>(&(*i).first),
@@ -410,7 +411,8 @@ void SocketCore::establishConnection(const std::string& host, uint16_t port)
if(!_bindAddrs.empty()) {
bool bindSuccess = false;
for(std::vector<std::pair<struct sockaddr_storage, socklen_t> >::
- const_iterator i = _bindAddrs.begin(); i != _bindAddrs.end(); ++i) {
+ const_iterator i = _bindAddrs.begin(), eoi = _bindAddrs.end();
+ i != eoi; ++i) {
if(::bind(fd,reinterpret_cast<const struct sockaddr*>(&(*i).first),
(*i).second) == -1) {
if(LogFactory::getInstance()->debug()) {
@@ -1249,7 +1251,8 @@ void SocketCore::bindAddress(const std::string& iface)
} else {
_bindAddrs = bindAddrs;
for(std::vector<std::pair<struct sockaddr_storage, socklen_t> >::
- const_iterator i = _bindAddrs.begin(); i != _bindAddrs.end(); ++i) {
+ const_iterator i = _bindAddrs.begin(), eoi = _bindAddrs.end();
+ i != eoi; ++i) {
char host[NI_MAXHOST];
int s;
s = getnameinfo(reinterpret_cast<const struct sockaddr*>(&(*i).first),