ProbePort.pm 807 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package Selenium::CanStartBinary::ProbePort;
  2. # ABSTRACT: Utility functions for finding open ports to eventually bind to
  3. use IO::Socket::INET;
  4. use Selenium::Waiter qw/wait_until/;
  5. require Exporter;
  6. our @ISA = qw/Exporter/;
  7. our @EXPORT_OK = qw/find_open_port_above find_open_port probe_port/;
  8. sub find_open_port_above {
  9. my ($port) = @_;
  10. my $free_port = wait_until {
  11. if ( probe_port($port) ) {
  12. $port++;
  13. return 0;
  14. }
  15. else {
  16. return $port;
  17. }
  18. };
  19. return $free_port;
  20. }
  21. sub find_open_port {
  22. my ($port) = @_;
  23. probe_port($port) ? return 0 : return $port;
  24. }
  25. sub probe_port {
  26. my ($port) = @_;
  27. return IO::Socket::INET->new(
  28. PeerAddr => '127.0.0.1',
  29. PeerPort => $port,
  30. Timeout => 3
  31. );
  32. }