X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fport.cc;h=01e0e88b34426e1f014db5fd43346903d004570e;hb=7bca10ca93172c1417f10c630a13c7aa88617ded;hp=904a0addc5733d3ea4f8715057aa1befa8f0292a;hpb=23bbe3972dada1e21493437ba64be129e86b59fc;p=awesomized%2Flibmemcached diff --git a/libtest/port.cc b/libtest/port.cc index 904a0add..01e0e88b 100644 --- a/libtest/port.cc +++ b/libtest/port.cc @@ -69,12 +69,13 @@ struct socket_st { void release(in_port_t _arg) { - for(socket_port_t::iterator iter= _pair.begin(); - iter != _pair.end(); - iter++) + for (socket_port_t::iterator iter= _pair.begin(); + iter != _pair.end(); + ++iter) { if ((*iter).second == _arg) { + shutdown((*iter).first, SHUT_RDWR); close((*iter).first); } } @@ -82,10 +83,11 @@ struct socket_st { ~socket_st() { - for(socket_port_t::iterator iter= _pair.begin(); - iter != _pair.end(); - iter++) + for (socket_port_t::iterator iter= _pair.begin(); + iter != _pair.end(); + ++iter) { + shutdown((*iter).first, SHUT_RDWR); close((*iter).first); } } @@ -118,7 +120,7 @@ in_port_t get_free_port() int retries= 1024; - while (retries--) + while (--retries) { int sd; if ((sd= socket(AF_INET, SOCK_STREAM, 0)) != -1) @@ -153,11 +155,21 @@ in_port_t get_free_port() } // We handle the case where if we max out retries, we still abort. - if (ret_port <= 1024) + if (retries == 0) + { + fatal_message("No port could be found, exhausted retry"); + } + + if (ret_port == 0) { fatal_message("No port could be found"); } + if (ret_port <= 1024) + { + fatal_message("No port could be found, though some where available below or at 1024"); + } + return ret_port; }