my $d = HTTP::Daemon->new( LocalAddr => 'localhost', LocalPort => 4242, ReuseAddr => 1) || die; my $select = IO::Select->new(); $select->add($d); while ($select->count()) { my @ready = $select->can_read(); # Blocking foreach my $connection (@ready) { if ($connection == $d) { # on the daemon so accept and add the connection my $client = $connection->accept(); $select->add($client); } else { # is a client connection my $request = $connection->get_request(); if ($request) { # process the request } else { # connection closed by the client $select->remove($connection); $connection->close(); # probably not necessary } } # end processing connections with data }