+ Retry server_is_listening{[&] {
+ if (!server.isListening()) {
+ // zombie?
+ auto old_pid = server.getPid();
+ if (server.tryWait()) {
+ cerr << "zombie collected (old pid=" << old_pid << "): " << server << "\n";
+ pids.erase(old_pid);
+ // restart
+ startServer(server);
+ }
+ if (!server.isListening()) {
+ return false;
+ }
+ }
+ return true;
+ }};
+ if (!server_is_listening()) {