7 __PACKAGE__->config( name => 'ExternalCatty' );
9 __PACKAGE__->setup_engine('HTTP');
11 sub MAX_PORT_TRIES() { 5 }
13 # The Cat HTTP server background option is useless here :-(
14 # Thus we have to provide our own background method.
18 $port = $self->assert_or_find_available_port($port);
20 die "Can't fork Cat HTTP server: $!" unless defined $child;
21 return($child, $port) if $child;
23 if ( $^O !~ /MSWin32/ ) {
25 POSIX::setsid() or die "Can't start a new session: $!";
28 return($self->run($port), $port);
31 sub assert_or_find_available_port {
32 my($self, $port) = @_;
33 for my $i (1..MAX_PORT_TRIES) {
34 IO::Socket::INET->new(
35 LocalAddr => 'localhost',
39 $port += int(rand 100) + 1;
41 die q{Can't find an open port to run external server on after }
42 . MAX_PORT_TRIES . q{tries};