#
# I have modified it to suit my devious purposes (Dirk Koopman G1TLH)
#
-# $Id$
+#
#
package Msg;
use DXUtil;
use IO::Select;
-use IO::Socket;
use DXDebug;
use Timer;
-use vars qw(%rd_callbacks %wt_callbacks %er_callbacks $rd_handles $wt_handles $er_handles $now %conns $noconns $blocking_supported $cnum $total_in $total_out);
+use vars qw(%rd_callbacks %wt_callbacks %er_callbacks $rd_handles $wt_handles $er_handles $now %conns $noconns $blocking_supported $cnum $total_in $total_out $io_socket);
%rd_callbacks = ();
%wt_callbacks = ();
local $^W;
require POSIX; POSIX->import(qw(O_NONBLOCK F_SETFL F_GETFL))
};
+
+ eval {
+ local $^W;
+ require IO::Socket::INET6;
+ };
+
+ if ($@) {
+ dbg($@);
+ require IO::Socket;
+ $io_socket = 'IO::Socket::INET';
+ } else {
+ $io_socket = 'IO::Socket::INET6';
+ }
+ $io_socket->import;
+
if ($@ || $main::is_win) {
- $blocking_supported = IO::Socket->can('blocking') ? 2 : 0;
+ $blocking_supported = $io_socket->can('blocking') ? 2 : 0;
} else {
- $blocking_supported = IO::Socket->can('blocking') ? 2 : 1;
+ $blocking_supported = $io_socket->can('blocking') ? 2 : 1;
}
# defines EINPROGRESS as 10035. We provide it here because some
# Win32 users report POSIX::EINPROGRESS is not vendor-supported.
if ($^O eq 'MSWin32') {
- eval '*EINPROGRESS = sub { 10036 };';
- eval '*EWOULDBLOCK = *EAGAIN = sub { 10035 };';
- eval '*F_GETFL = sub { 0 };';
- eval '*F_SETFL = sub { 0 };';
- eval '*IPPROTO_TCP = sub { 6 };';
- eval '*TCP_NODELAY = sub { 1 };';
+ eval '*EINPROGRESS = sub { 10036 };' unless defined *EINPROGRESS;
+ eval '*EWOULDBLOCK = *EAGAIN = sub { 10035 };' unless defined *EWOULDBLOCK;
+ eval '*F_GETFL = sub { 0 };' unless defined *F_GETFL;
+ eval '*F_SETFL = sub { 0 };' unless defined *F_SETFL;
+ eval 'sub IPPROTO_TCP { 6 };';
+ eval 'sub TCP_NODELAY { 1 };';
$blocking_supported = 0; # it appears that this DOESN'T work :-(
}
}
$conn->{sort} = 'Outgoing';
# Create a new internet socket
- my $sock = IO::Socket::INET->new();
+ my $sock = $io_socket->new();
return undef unless $sock;
my $proto = getprotobyname('tcp');
my $pid;
local $^F = 10000; # make sure it ain't closed on exec
- my ($a, $b) = IO::Socket->socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC);
+ my ($a, $b) = $io_socket->socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC);
if ($a && $b) {
$a->autoflush(1);
$b->autoflush(1);
my ($pkg, $my_host, $my_port, $login_proc) = @_;
my $self = $pkg->new($login_proc);
- $self->{sock} = IO::Socket::INET->new (
+ $self->{sock} = $io_socket->new (
LocalAddr => "$my_host:$my_port",
# LocalPort => $my_port,
Listen => SOMAXCONN,
return unless defined($sock);
my @lines;
- if ($conn->{blocking}) {
- blocking($sock, 0);
- $conn->{blocking} = 0;
- }
+# if ($conn->{blocking}) {
+# blocking($sock, 0);
+# $conn->{blocking} = 0;
+# }
$bytes_read = sysread ($sock, $msg, 1024, 0);
if (defined ($bytes_read)) {
if ($bytes_read > 0) {