Clean up listening sockets on error
diff --git a/win/winvnc/ManagedListener.cxx b/win/winvnc/ManagedListener.cxx
index b80f5a1..9137238 100644
--- a/win/winvnc/ManagedListener.cxx
+++ b/win/winvnc/ManagedListener.cxx
@@ -107,7 +107,11 @@
       for (iter = sockets.begin(); iter != sockets.end(); ++iter)
         manager->addListener(*iter, server, addrChangeNotifier);
     } catch (...) {
-      // FIXME: Should unwind what we've added
+      std::list<network::TcpListener*>::iterator iter2;
+      for (iter2 = sockets.begin(); iter2 != iter; ++iter2)
+        manager->remListener(*iter2);
+      for (; iter2 != sockets.end(); ++iter2)
+        delete *iter;
       sockets.clear();
       throw;
     }