X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fport.cc;h=904a0addc5733d3ea4f8715057aa1befa8f0292a;hb=23bbe3972dada1e21493437ba64be129e86b59fc;hp=9f9a5bfeede83d9053a1504b2f44cc70bc5e1ab5;hpb=74d72ecac00cadaab9e9a40d6591c7285abbfbc2;p=m6w6%2Flibmemcached diff --git a/libtest/port.cc b/libtest/port.cc index 9f9a5bfe..904a0add 100644 --- a/libtest/port.cc +++ b/libtest/port.cc @@ -50,6 +50,9 @@ #include #include +#include +#include + #include #include @@ -61,13 +64,29 @@ using namespace libtest; struct socket_st { - std::vector fd; + typedef std::vector< std::pair< int, in_port_t> > socket_port_t; + socket_port_t _pair; + + void release(in_port_t _arg) + { + for(socket_port_t::iterator iter= _pair.begin(); + iter != _pair.end(); + iter++) + { + if ((*iter).second == _arg) + { + close((*iter).first); + } + } + } ~socket_st() { - for(std::vector::iterator iter= fd.begin(); iter != fd.end(); iter++) + for(socket_port_t::iterator iter= _pair.begin(); + iter != _pair.end(); + iter++) { - close(*iter); + close((*iter).first); } } }; @@ -88,6 +107,11 @@ in_port_t default_port() return global_port; } +void release_port(in_port_t arg) +{ + all_socket_fd.release(arg); +} + in_port_t get_free_port() { in_port_t ret_port= in_port_t(0); @@ -119,7 +143,7 @@ in_port_t get_free_port() } } - all_socket_fd.fd.push_back(sd); + all_socket_fd._pair.push_back(std::make_pair(sd, ret_port)); } if (ret_port > 1024)