Index: /trunk/lib/Perlbal/Test.pm
===================================================================
--- /trunk/lib/Perlbal/Test.pm (revision 784)
+++ /trunk/lib/Perlbal/Test.pm (revision 822)
@@ -28,4 +28,5 @@
 use POSIX qw( :sys_wait_h );
 use IO::Socket::INET;
+use Socket qw(MSG_NOSIGNAL IPPROTO_TCP TCP_NODELAY SOL_SOCKET);
 use HTTP::Response;
 
@@ -97,5 +98,5 @@
 =head1 I<new_port()>
 
-Return the next port number in the series. Port numbers are assigned
+Return the next free port number in the series. Port numbers are assigned
 starting at 60000.
 
@@ -103,5 +104,17 @@
 
 sub new_port {
-    return $free_port++;  # FIXME: make it somehow detect if port is in use?
+    test_port() ? return $free_port++ : return new_port($free_port++);
+}
+
+=head1 I<test_port()>
+
+Return 1 if the port is free to use for listening on $free_port else return 0.
+
+=cut
+
+sub test_port {
+    my $sock = IO::Socket::INET->new(LocalPort => $free_port) or return 0;
+    $sock->close();
+    return 1;
 }
 
Index: /trunk/CHANGES
===================================================================
--- /trunk/CHANGES (revision 821)
+++ /trunk/CHANGES (revision 822)
@@ -1,2 +1,5 @@
+    -- make Perlbal::Test be more robust and only use free ports.
+       (Bart van der Schans <herengracht@gmail.com>)
+       
     -- Make Content-Range replies work (Ask BjÃžrn Hansen) 
 
