diff --git a/src/modules/files/socktest.pike b/src/modules/files/socktest.pike
index bff4a6f6713dbfc7372ebefc2f1d3074f85f05fe..039393368659b029223726e06e88f4061bc7d27b 100755
--- a/src/modules/files/socktest.pike
+++ b/src/modules/files/socktest.pike
@@ -1,6 +1,6 @@
 #!/usr/local/bin/pike
 
-/* $Id: socktest.pike,v 1.46 2008/06/28 00:09:25 nilsson Exp $ */
+/* $Id: socktest.pike,v 1.47 2008/07/09 16:24:05 grubba Exp $ */
 
 // #define OOB_DEBUG
 
@@ -232,7 +232,7 @@ void got_callback()
 #ifdef OOB_DEBUG
   predef::write(sprintf("%c\b","|/-\\" [ counter & 3 ]));
 #else /* !OOB_DEBUG */
-  if(!verbose && !(counter & 0xf))
+  if(verbose && !(counter & 0xf))
     predef::write(sprintf("%c\b","|/-\\" [ (counter>>4) & 3 ]));
 #endif /* OOB_DEBUG */
 #ifdef BACKEND
@@ -277,7 +277,7 @@ void got_oob1(mixed ignored, string got)
 #endif
   got_callback();
   if (got != expected) {
-    write(sprintf("loopback: Received unexpected oob data "
+    write(sprintf("\nloopback: Received unexpected oob data "
 		   "(0x%02x != 0x%02x)\n",
 		   got[0], expected[0]));
     exit(1);
@@ -303,7 +303,7 @@ void got_oob0(mixed ignored, string got)
 #endif
   got_callback();
   if (got != expected) {
-    write(sprintf("loopback: Received unexpected oob data "
+    write(sprintf("\nloopback: Received unexpected oob data "
 		   "(0x%02x != 0x%02x)\n",
 		   got[0], expected[0]));
     exit(1);
@@ -422,13 +422,14 @@ array(object) spair(int type)
 
 mixed keeper;
 
-int testno = 0;
 void test_write(string str)
 {
   if( verbose )
-    write(str);
+    write("\n" + str);
+  else
+    write("\r                                                       \r" + str);
   //  else
-  //    write("Test %d\r", ++testno);
+  //    write("Test %d\r", _tests);
 }
 
 void finish()
@@ -437,14 +438,16 @@ void finish()
   num_running--;
   if(!num_running)
   {
-    if( verbose )
-      write("\n");
-
     object sock1, sock2;
     array(object) socks;
     int tests;
 
     _tests++;
+#ifdef IPV6
+    // Linux 2.6.x seems to hang when running out of IPV6 ports
+    // on the loopback. Give it some time to clean up its act...
+    sleep(!(_tests&3));
+#endif
     switch(_tests)
     {
       case 1:
@@ -573,6 +576,7 @@ void finish()
 #endif /* constant(Stdio.__OOB__) */
 
     default:
+      write("\n");
       exit(delayed_failure);
       break;
     }
@@ -594,12 +598,11 @@ void accept_callback()
   o->expected_data = "foobar" * 4711;
 }
 
-int main()
+int main(int argc, array(string) argv)
 {
   string testargs=getenv()->TESTARGS;
-  if(testargs &&
-     (has_value(testargs/" ", "-v") ||
-      has_value(testargs/" ", "--verbose") ) )
+  argv += testargs?(testargs/" "):({});
+  if(has_value(argv[1..], "-v") || has_value(argv[1..], "--verbose"))
     verbose=1;
 
   write("\nSocket test");
@@ -696,7 +699,7 @@ int main()
   _tests=49;
   finish();
 #else /* !OOB_DEBUG */
-  write("\nDoing simple tests. ");
+  test_write("\nDoing simple tests. ");
   stdtest();
 #endif /* OOB_DEBUG */