IO-Socket-Socks
view release on metacpan or search on metacpan
t/03_connect.t view on Meta::CPAN
$time_spent = time()-$start;
ok($time_spent < 3, 'Socks 5 non-blocking connect time') or diag "$time_spent sec spent";
$sel = IO::Select->new($sock);
$i = 0;
$start = time();
until ($sock->ready) {
$i++;
$time_spent = time()-$start;
ok($time_spent < 1, "Connection attempt $i not blocked") or diag "$time_spent sec spent";
if ($SOCKS_ERROR == SOCKS_WANT_READ) {
$sel->can_read(0.8);
}
elsif ($SOCKS_ERROR == SOCKS_WANT_WRITE) {
$sel->can_write(0.8);
}
else {
last;
}
$start = time();
}
ok($sock->ready, 'Socks 5 non-blocking socket ready') or diag $SOCKS_ERROR;
is($sock->version, 5, 'Version is 5 for non-blocking connect');
$sock = IO::Socket::Socks->new(
SocksVersion => 5, ProxyAddr => $s_host, ProxyPort => $s_port, ConnectAddr => $h_host, ConnectPort => $h_port, Username => 'root', Password => 'toot',
AuthType => 'userpass', Blocking => 0
);
if (defined $sock) {
$sel = IO::Select->new($sock);
$i = 0;
$start = time();
until ($sock->ready) {
$i++;
$time_spent = time()-$start;
ok($time_spent < 1, "Connection attempt $i not blocked") or diag "$time_spent sec spent";
if ($SOCKS_ERROR == SOCKS_WANT_READ) {
$sel->can_read(0.8);
}
elsif ($SOCKS_ERROR == SOCKS_WANT_WRITE) {
$sel->can_write(0.8);
}
else {
last;
}
$start = time();
}
ok(!$sock->ready, 'Socks 5 non-blocking connect with fail auth');
}
else {
pass('Socks 5 non-blocking connect with fail auth (immediatly)');
}
kill 15, $s_pid;
}
($s_pid, $s_host, $s_port) = make_socks_server(5);
socket(my $unconnected_sock, $family, SOCK_STREAM, getprotobyname('tcp')) || die "socket: $!";
$sock = IO::Socket::Socks->new_from_socket($unconnected_sock, ProxyAddr => $s_host, ProxyPort => $s_port, ConnectAddr => $h_host, ConnectPort => $h_port);
ok($unconnected_sock, "plain socket still alive");
if (ok($sock, "socks object created from plain socket")) {
is(fileno($sock), fileno($unconnected_sock), "socks object uses plain socket");
}
# without quotes will not work on old perl (<= 5.14?)
$sock = "$IO::Socket::Socks::SOCKET_CLASS"->new(PeerAddr => $s_host, PeerPort => $s_port);
if (ok($sock, "$IO::Socket::Socks::SOCKET_CLASS socket created")) {
$sock = IO::Socket::Socks->start_SOCKS($sock, ConnectAddr => $h_host, ConnectPort => $h_port);
ok($sock, "$IO::Socket::Socks::SOCKET_CLASS socket upgraded to IO::Socket::Socks");
isa_ok($sock, 'IO::Socket::Socks');
$sock->syswrite(
"GET / HTTP/1.1\015\012\015\012"
);
is($sock->getline(), "HTTP/1.1 200 OK\015\012", 'socket works properly');
}
kill 15, $s_pid;
SKIP: {
skip "SOCKS_SLOW_TESTS environment variable should has true value", 1 unless $ENV{SOCKS_SLOW_TESTS} || $ENV{AUTOMATED_TESTING};
($s_pid, $s_host, $s_port) = make_socks_server(5, undef, undef, reply => 3);
socket(my $unconnected_sock, $family, SOCK_STREAM, getprotobyname('tcp')) || die "socket: $!";
my $start = time();
$sock = IO::Socket::Socks->new_from_socket($unconnected_sock, ProxyAddr => $s_host, ProxyPort => $s_port, ConnectAddr => $h_host, ConnectPort => $h_port, Blocking => 0);
ok($sock, "new non-bloking object from plain socket created");
ok(!$sock->blocking, 'object is non-blocking');
my $time_spent = time()-$start;
ok($time_spent < 3, 'new_from_socket: Socks 5 non-blocking connect time') or diag "$time_spent sec spent";
my $sel = IO::Select->new($sock);
my $i = 0;
$start = time();
until ($sock->ready) {
$i++;
$time_spent = time()-$start;
ok($time_spent < 1, "new_from_socket: Connection attempt $i not blocked") or diag "$time_spent sec spent";
if ($SOCKS_ERROR == SOCKS_WANT_READ) {
$sel->can_read(0.8);
}
elsif ($SOCKS_ERROR == SOCKS_WANT_WRITE) {
$sel->can_write(0.8);
}
else {
last;
}
$start = time();
}
ok($sock->ready, 'new_from_socket: Socks 5 non-blocking socket ready') or diag $SOCKS_ERROR;
is($sock->version, 5, 'new_from_socket: Version is 5 for non-blocking connect');
$SOCKS_ERROR->set(SOCKS_WANT_WRITE, 'TEST rt#118471');
$sock = "$IO::Socket::Socks::SOCKET_CLASS"->new(PeerAddr => $s_host, PeerPort => $s_port);
$sock->blocking(0);
$start = time();
$sock = IO::Socket::Socks->start_SOCKS($sock, ConnectAddr => $h_host, ConnectPort => $h_port);
ok($sock, "$IO::Socket::Socks::SOCKET_CLASS socket upgraded to IO::Socket::Socks");
ok(!$sock->blocking, 'object is non-blocking');
$time_spent = time()-$start;
ok($time_spent < 3, 'start_SOCKS: Socks 5 non-blocking connect time') or diag "$time_spent sec spent";
( run in 2.740 seconds using v1.01-cache-2.11-cpan-99c4e6809bf )