This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Socket from 2.036 to 2.037
[perl5.git] / cpan / Socket / t / Socket.t
CommitLineData
37120919
AD
1#!./perl
2
8bb05de3
N
3use v5.6.1;
4use strict;
5use warnings;
6
7our %Config;
8my $has_alarm;
37120919 9BEGIN {
37120919 10 require Config; import Config;
c2654555 11 if ($Config{'extensions'} !~ /\bSocket\b/ &&
3149255e 12 !(($^O eq 'VMS') && $Config{d_socket})) {
1004cf1c
SH
13 print "1..0\n";
14 exit 0;
37120919 15 }
ae054b0e 16 $has_alarm = $Config{d_alarm};
37120919 17}
1004cf1c 18
38f5dce2 19use Socket qw(:all);
eabcd9c8 20use Test::More tests => 6;
37120919 21
8bb05de3
N
22my $has_echo = $^O ne 'MSWin32';
23my $alarmed = 0;
ae054b0e
JH
24sub arm { $alarmed = 0; alarm(shift) if $has_alarm }
25sub alarmed { $alarmed = 1 }
26$SIG{ALRM} = 'alarmed' if $has_alarm;
27
bd71e0a1
PE
28SKIP: {
29 unless(socket(T, PF_INET, SOCK_STREAM, IPPROTO_TCP)) {
1004cf1c 30 skip "No PF_INET", 3;
bd71e0a1
PE
31 }
32
33 pass "socket(PF_INET)";
34
35 arm(5);
36 my $host = $^O eq 'MacOS' || ($^O eq 'irix' && $Config{osvers} == 5) ?
1004cf1c 37 '127.0.0.1' : 'localhost';
bd71e0a1
PE
38 my $localhost = inet_aton($host);
39
40 SKIP: {
1004cf1c
SH
41 unless($has_echo && defined $localhost && connect(T,pack_sockaddr_in(7,$localhost))) {
42 skip "Unable to connect to localhost:7", 2;
43 }
ef5a6dd7 44
1004cf1c 45 arm(0);
ae054b0e 46
1004cf1c 47 pass "PF_INET echo localhost connected";
37120919 48
1004cf1c
SH
49 diag "Connected to " .
50 inet_ntoa((unpack_sockaddr_in(getpeername(T)))[1])."\n";
37120919 51
1004cf1c
SH
52 arm(5);
53 syswrite(T,"hello",5);
54 arm(0);
ae054b0e 55
1004cf1c
SH
56 arm(5);
57 my $buff;
58 my $read = sysread(T,$buff,10); # Connection may be granted, then closed!
59 arm(0);
ae054b0e 60
1004cf1c
SH
61 while ($read > 0 && length($buff) < 5) {
62 # adjust for fact that TCP doesn't guarantee size of reads/writes
63 arm(5);
64 $read = sysread(T,$buff,10,length($buff));
65 arm(0);
66 }
bd71e0a1 67
1004cf1c 68 ok(($read == 0 || $buff eq "hello"), "PF_INET echo localhost reply");
bd71e0a1 69 }
37120919
AD
70}
71
bd71e0a1
PE
72SKIP: {
73 unless(socket(S, PF_INET, SOCK_STREAM, IPPROTO_TCP)) {
1004cf1c 74 skip "No PF_INET", 3;
bd71e0a1
PE
75 }
76
77 pass "socket(PF_INET)";
78
79 SKIP: {
1004cf1c
SH
80 arm(5);
81 unless($has_echo && connect(S,pack_sockaddr_in(7,INADDR_LOOPBACK))) {
82 skip "Unable to connect to localhost:7", 2;
83 }
37120919 84
ae054b0e
JH
85 arm(0);
86
1004cf1c 87 pass "PF_INET echo INADDR_LOOPBACK connected";
37120919 88
1004cf1c
SH
89 diag "Connected to " .
90 inet_ntoa((unpack_sockaddr_in(getpeername(S)))[1])."\n";
37120919 91
1004cf1c
SH
92 arm(5);
93 syswrite(S,"olleh",5);
94 arm(0);
ae054b0e 95
1004cf1c
SH
96 arm(5);
97 my $buff;
98 my $read = sysread(S,$buff,10); # Connection may be granted, then closed!
99 arm(0);
ae054b0e 100
1004cf1c
SH
101 while ($read > 0 && length($buff) < 5) {
102 # adjust for fact that TCP doesn't guarantee size of reads/writes
103 arm(5);
104 $read = sysread(S,$buff,10,length($buff));
105 arm(0);
106 }
bd71e0a1 107
1004cf1c 108 ok(($read == 0 || $buff eq "olleh"), "PF_INET echo INADDR_LOOPBACK reply");
bd71e0a1 109 }
37120919 110}