Skip to content

Instantly share code, notes, and snippets.

/ports.diff Secret

Created January 25, 2017 18:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/12e3354d66889202377e42280c82cec3 to your computer and use it in GitHub Desktop.
Save anonymous/12e3354d66889202377e42280c82cec3 to your computer and use it in GitHub Desktop.
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