Update docs.
[awesomized/libmemcached] / libtest / port.cc
index 904a0addc5733d3ea4f8715057aa1befa8f0292a..01e0e88b34426e1f014db5fd43346903d004570e 100644 (file)
@@ -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;
 }