@@ -21,18 +21,12 @@ use strict;
21
21
use warnings;
22
22
use Socket;
23
23
24
- my $skip_var = $ENV {' DRUID_SKIP_PORT_CHECK' };
25
- if ($skip_var && $skip_var ne " 0" && $skip_var ne " false" && $skip_var ne " f" ) {
26
- exit 0;
27
- }
24
+ sub try_bind {
25
+ my ($port , $addr ) = @_ ;
28
26
29
- my @ports = (1527, 2181, 8081, 8082, 8083, 8090, 8091, 8200, 8888);
30
-
31
- my $tcp = getprotobyname (" tcp" );
32
- for my $port (@ports ) {
33
- socket (my $sock , PF_INET, SOCK_STREAM, $tcp ) or die " socket: $! " ;
27
+ socket (my $sock , PF_INET, SOCK_STREAM, Socket::IPPROTO_TCP) or die " socket: $! " ;
34
28
setsockopt ($sock , SOL_SOCKET, SO_REUSEADDR, pack (" l" , 1)) or die " setsockopt: $! " ;
35
- if (!bind ($sock , sockaddr_in($port , INADDR_ANY ))) {
29
+ if (!bind ($sock , sockaddr_in($port , $addr ))) {
36
30
print STDERR <<"EOT" ;
37
31
Cannot start up because port $port is already in use.
38
32
@@ -42,11 +36,27 @@ configuration documentation:
42
36
https://druid.apache.org/docs/latest/configuration/index.html
43
37
44
38
If you believe this check is in error, or if you have changed your ports away
45
- from the defaults, you can skip the check using an environment variable:
39
+ from the defaults, you can skip this check using an environment variable:
46
40
47
41
export DRUID_SKIP_PORT_CHECK=1
48
42
49
43
EOT
50
44
exit 1;
51
45
}
46
+ shutdown ($sock , 2);
47
+ }
48
+
49
+ my $skip_var = $ENV {' DRUID_SKIP_PORT_CHECK' };
50
+ if ($skip_var && $skip_var ne " 0" && $skip_var ne " false" && $skip_var ne " f" ) {
51
+ exit 0;
52
+ }
53
+
54
+ my @ports = @ARGV ;
55
+ if (!@ports ) {
56
+ @ports = (1527, 2181, 8081, 8082, 8083, 8090, 8091, 8100, 8200, 8888);
57
+ }
58
+
59
+ for my $port (@ports ) {
60
+ try_bind($port , INADDR_ANY);
61
+ try_bind($port , inet_aton(" 127.0.0.1" ));
52
62
}
0 commit comments