-
-
Save anonymous/12e3354d66889202377e42280c82cec3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/lib/Mojo/Server/Daemon.pm b/lib/Mojo/Server/Daemon.pm | |
index bcbf992a8..51c2f6764 100644 | |
--- a/lib/Mojo/Server/Daemon.pm | |
+++ b/lib/Mojo/Server/Daemon.pm | |
@@ -32,6 +32,10 @@ sub close_idle_connections { | |
!$c->{$_}{tx} and $c->{$_}{requests} and $loop->remove($_) for keys %$c; | |
} | |
+sub ports { | |
+ [map { $_[0]->ioloop->acceptor($_)->port } @{$_[0]->acceptors}]; | |
+} | |
+ | |
sub run { | |
my $self = shift; | |
@@ -469,6 +473,15 @@ implements the following new ones. | |
Close all connections without active requests. Note that this method is | |
EXPERIMENTAL and might change without warning! | |
+=head2 ports | |
+ | |
+ my $ports = $daemon->ports; | |
+ | |
+Get all ports this server is currently listening on. | |
+ | |
+ # All ports | |
+ say for @{$daemon->ports}; | |
+ | |
=head2 run | |
$daemon->run; | |
@@ -482,8 +495,7 @@ Run server and wait for L</"SIGNALS">. | |
Start or resume accepting connections through L</"ioloop">. | |
# Listen on random port | |
- my $id = $daemon->listen(['http://127.0.0.1'])->start->acceptors->[0]; | |
- my $port = $daemon->ioloop->acceptor($id)->port; | |
+ my $port = $daemon->listen(['http://127.0.0.1'])->start->ports->[0]; | |
# Run multiple web servers concurrently | |
my $daemon1 = Mojo::Server::Daemon->new(listen => ['http://*:3000'])->start; | |
diff --git a/lib/Mojo/UserAgent/Server.pm b/lib/Mojo/UserAgent/Server.pm | |
index da1fcb466..9a39a7e68 100644 | |
--- a/lib/Mojo/UserAgent/Server.pm | |
+++ b/lib/Mojo/UserAgent/Server.pm | |
@@ -37,15 +37,15 @@ sub _restart { | |
= Mojo::Server::Daemon->new(ioloop => $self->ioloop, silent => 1); | |
weaken $server->app($self->app)->{app}; | |
my $port = $self->{port} ? ":$self->{port}" : ''; | |
- $self->{port} = $server->listen(["$proto://127.0.0.1$port"]) | |
- ->start->ioloop->acceptor($server->acceptors->[0])->port; | |
+ $self->{port} | |
+ = $server->listen(["$proto://127.0.0.1$port"])->start->ports->[0]; | |
# Non-blocking | |
$server = $self->{nb_server} = Mojo::Server::Daemon->new(silent => 1); | |
weaken $server->app($self->app)->{app}; | |
$port = $self->{nb_port} ? ":$self->{nb_port}" : ''; | |
- $self->{nb_port} = $server->listen(["$proto://127.0.0.1$port"]) | |
- ->start->ioloop->acceptor($server->acceptors->[0])->port; | |
+ $self->{nb_port} | |
+ = $server->listen(["$proto://127.0.0.1$port"])->start->ports->[0]; | |
} | |
sub _url { | |
diff --git a/t/mojo/daemon.t b/t/mojo/daemon.t | |
index 0c280ffc4..15e78c276 100644 | |
--- a/t/mojo/daemon.t | |
+++ b/t/mojo/daemon.t | |
@@ -236,8 +236,7 @@ ok $remote_port > 0, 'has remote port'; | |
# Pipelined | |
$daemon | |
= Mojo::Server::Daemon->new({listen => ['http://127.0.0.1'], silent => 1}); | |
-$daemon->start; | |
-my $port = Mojo::IOLoop->acceptor($daemon->acceptors->[0])->port; | |
+my $port = $daemon->start->ports->[0]; | |
is $daemon->app->moniker, 'HelloWorld', 'right moniker'; | |
my $buffer = ''; | |
my $id; | |
@@ -314,7 +313,7 @@ $daemon = Mojo::Server::Daemon->new( | |
listen => ['http://127.0.0.1'], | |
silent => 1 | |
)->start; | |
-$port = Mojo::IOLoop->acceptor($daemon->acceptors->[0])->port; | |
+$port = $daemon->ports->[0]; | |
is $daemon->max_requests, 100, 'right value'; | |
is $daemon->max_requests(2)->max_requests, 2, 'right value'; | |
$tx = $ua->get("http://127.0.0.1:$port/keep_alive/1"); | |
diff --git a/t/mojo/daemon_ipv6_tls.t b/t/mojo/daemon_ipv6_tls.t | |
index 820b79ee8..8ff98b965 100644 | |
--- a/t/mojo/daemon_ipv6_tls.t | |
+++ b/t/mojo/daemon_ipv6_tls.t | |
@@ -104,8 +104,7 @@ my $daemon = Mojo::Server::Daemon->new( | |
listen => ['https://[::1]'], | |
silent => 1 | |
); | |
-$daemon->start; | |
-my $port = Mojo::IOLoop->acceptor($daemon->acceptors->[0])->port; | |
+my $port = $daemon->start->ports->[0]; | |
my $ua = Mojo::UserAgent->new(ioloop => Mojo::IOLoop->singleton); | |
my $tx = $ua->get("https://[::1]:$port/"); | |
is $tx->res->code, 200, 'right status'; | |
@@ -122,8 +121,7 @@ SKIP: { | |
. '&127.0.0.1_key=t/mojo/certs/server.key' | |
. '&example.com_cert=t/mojo/certs/domain.crt' | |
. '&example.com_key=t/mojo/certs/domain.key'; | |
- $daemon->listen([$listen])->start; | |
- $forward = Mojo::IOLoop->acceptor($daemon->acceptors->[0])->port; | |
+ $forward = $daemon->listen([$listen])->start->ports->[0]; | |
$ua = Mojo::UserAgent->new( | |
ioloop => Mojo::IOLoop->singleton, | |
ca => 't/mojo/certs/ca.crt' | |
diff --git a/t/mojo/user_agent_tls.t b/t/mojo/user_agent_tls.t | |
index fd4e63433..112bb0bfa 100644 | |
--- a/t/mojo/user_agent_tls.t | |
+++ b/t/mojo/user_agent_tls.t | |
@@ -31,8 +31,7 @@ my $listen | |
. '?cert=t/mojo/certs/server.crt' | |
. '&key=t/mojo/certs/server.key' | |
. '&ca=t/mojo/certs/ca.crt'; | |
-$daemon->listen([$listen])->start; | |
-my $port = Mojo::IOLoop->acceptor($daemon->acceptors->[0])->port; | |
+my $port = $daemon->listen([$listen])->start->ports->[0]; | |
# No certificate | |
my $ua = Mojo::UserAgent->new(ioloop => Mojo::IOLoop->singleton); | |
@@ -87,8 +86,7 @@ $listen | |
. '&ciphers=AES256-SHA:ALL' | |
. '&verify=0x00' | |
. '&version=TLSv1'; | |
-$daemon->listen([$listen])->start; | |
-$port = Mojo::IOLoop->acceptor($daemon->acceptors->[0])->port; | |
+$port = $daemon->listen([$listen])->start->ports->[0]; | |
# Invalid certificate | |
$ua = Mojo::UserAgent->new(ioloop => $ua->ioloop); | |
diff --git a/t/mojo/websocket_proxy.t b/t/mojo/websocket_proxy.t | |
index 79a277b7f..77b380bea 100644 | |
--- a/t/mojo/websocket_proxy.t | |
+++ b/t/mojo/websocket_proxy.t | |
@@ -32,8 +32,7 @@ websocket '/test' => sub { | |
# HTTP server for testing | |
my $ua = Mojo::UserAgent->new(ioloop => Mojo::IOLoop->singleton); | |
my $daemon = Mojo::Server::Daemon->new(app => app, silent => 1); | |
-$daemon->listen(['http://127.0.0.1'])->start; | |
-my $port = Mojo::IOLoop->acceptor($daemon->acceptors->[0])->port; | |
+my $port = $daemon->listen(['http://127.0.0.1'])->start->ports->[0]; | |
# CONNECT proxy server for testing | |
my (%buffer, $connected, $read, $sent); | |
diff --git a/t/mojo/websocket_proxy_tls.t b/t/mojo/websocket_proxy_tls.t | |
index 0a95c319a..3b2e124e0 100644 | |
--- a/t/mojo/websocket_proxy_tls.t | |
+++ b/t/mojo/websocket_proxy_tls.t | |
@@ -50,8 +50,7 @@ my $listen | |
. '?cert=t/mojo/certs/server.crt' | |
. '&key=t/mojo/certs/server.key' | |
. '&ca=t/mojo/certs/ca.crt'; | |
-$daemon->listen([$listen])->start; | |
-my $port = Mojo::IOLoop->acceptor($daemon->acceptors->[0])->port; | |
+my $port = $daemon->listen([$listen])->start->ports->[0]; | |
# Connect proxy server for testing | |
my (%buffer, $connected, $read, $sent); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment