testbot/lib: Use IO::Socket::INET as a fallback for IO::Socket::IP.

Francois Gouget fgouget at codeweavers.com
Thu Oct 25 11:14:06 CDT 2012


The latter provides transparent support for IPv6 but is missing on older Linux distributions.
---
 testbot/doc/INSTALL.txt              |    2 +-
 testbot/lib/WineTestBot/TestAgent.pm |   29 +++++++++++++++++++++++------
 2 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/testbot/doc/INSTALL.txt b/testbot/doc/INSTALL.txt
index 1cbfd83..b01aa48 100644
--- a/testbot/doc/INSTALL.txt
+++ b/testbot/doc/INSTALL.txt
@@ -8,7 +8,7 @@ Dependencies:
 - Sendmail
 - Sys::Virt (libsys-virt-perl, see http://libvirt.org/)
 - Image::Magick (perlmagick)
-- IO::Socket::IP (libio-socket-ip-perl)
+- Optional: IO::Socket::IP (for IPv6, libio-socket-ip-perl)
 
 MySQL setup:
 - Create a new 'winetestbot' database and its tables using the
diff --git a/testbot/lib/WineTestBot/TestAgent.pm b/testbot/lib/WineTestBot/TestAgent.pm
index 513b50f..7b6eb56 100644
--- a/testbot/lib/WineTestBot/TestAgent.pm
+++ b/testbot/lib/WineTestBot/TestAgent.pm
@@ -21,14 +21,33 @@
 package TestAgent;
 use strict;
 
-use IO::Socket::IP;
-
 use WineTestBot::Config;
 use WineTestBot::Log;
 
 my $DONE_READING = 0;
 my $DONE_WRITING = 1;
 
+
+sub create_ip_socket(@)
+{
+  my $socket;
+  eval { $socket = IO::Socket::IP->new(@_); };
+  return $socket;
+}
+
+sub create_inet_socket(@)
+{
+  return IO::Socket::INET->new(@_);
+}
+
+my $create_socket = \&create_ip_socket;
+eval "use IO::Socket::IP";
+if ($@)
+{
+  use IO::Socket::INET;
+  $create_socket = \&create_inet_socket;
+}
+
 sub _Connect($;$)
 {
   my ($Hostname, $Timeout) = @_;
@@ -38,10 +57,8 @@ sub _Connect($;$)
   while (1)
   {
     my $ConnectTimeout = $Timeout < 30 ? $Timeout : 30;
-    my $socket = IO::Socket::IP->new(PeerHost => $Hostname,
-                                     PeerPort => $AgentPort,
-                                     Type => SOCK_STREAM,
-                                     Timeout => $ConnectTimeout);
+    my $socket = &$create_socket(PeerHost => $Hostname, PeerPort => $AgentPort,
+                                 Type => SOCK_STREAM, Timeout => $ConnectTimeout);
     return $socket if ($socket);
 
     $Timeout = $Deadline - time();
-- 
1.7.10.4



More information about the wine-patches mailing list