summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorH.Merijn Brand <h.m.brand@xs4all.nl>2011-08-04 09:20:32 +0200
committerH.Merijn Brand <h.m.brand@xs4all.nl>2011-08-04 09:20:32 +0200
commit9cfd094e6d0a842551c1c58e998eb057cd8425e3 (patch)
tree35d80f75ece1586fbedb1593c4b82bdd8cf4fa74 /ext
parent4eb81ef27984510df69d5b65e3f5cfa0bd218069 (diff)
downloadperl-9cfd094e6d0a842551c1c58e998eb057cd8425e3.tar.gz
Support gcc-4.x on HP-UX PA-RISC/64
Correct the socketsize. Probably due to big-endian versus little-endian, this has always worked on Intel CPUs. This is a very very old problem, and it has been the reason I never used gcc-4 on PA-RISC, because perl would not pass the test suite in 64bitall. Noticeable effects of wrong "$socksizetype" are return codes of 0 (pass) from functions like getpeername (), but invalid (or none) data in the returned structures or a return length of 0 or 256. In the latter case, the length is stored in the second part of the 64bit long and the 32bit first part is 0. This might be true on Intel-like machines too, but the tests will pass, as the significant part of the returned length is in the first 32bits and a pointer to int will still see that correct. Mind that in that case the 32bits after that might have been overridden => can of worms.
Diffstat (limited to 'ext')
-rw-r--r--ext/Socket/t/getaddrinfo.t14
1 files changed, 10 insertions, 4 deletions
diff --git a/ext/Socket/t/getaddrinfo.t b/ext/Socket/t/getaddrinfo.t
index 5c8d1539d7..b85af38254 100644
--- a/ext/Socket/t/getaddrinfo.t
+++ b/ext/Socket/t/getaddrinfo.t
@@ -1,6 +1,6 @@
use strict;
use warnings;
-use Test::More tests => 29;
+use Test::More tests => 30;
use Socket qw(
AI_NUMERICHOST AF_INET SOCK_STREAM IPPROTO_TCP
@@ -21,9 +21,15 @@ is( $res[0]->{socktype}, SOCK_STREAM,
'$res[0] socktype is SOCK_STREAM' );
ok( $res[0]->{protocol} == 0 || $res[0]->{protocol} == IPPROTO_TCP,
'$res[0] protocol is 0 or IPPROTO_TCP' );
-is_deeply( [ unpack_sockaddr_in $res[0]->{addr} ],
- [ 80, inet_aton( "127.0.0.1" ) ],
- '$res[0] addr is {"127.0.0.1", 80}' );
+ok( defined $res[0]->{addr},
+ '$res[0] addr is defined' );
+if (length $res[0]->{addr}) {
+ is_deeply( [ unpack_sockaddr_in $res[0]->{addr} ],
+ [ 80, inet_aton( "127.0.0.1" ) ],
+ '$res[0] addr is {"127.0.0.1", 80}' );
+} else {
+ fail( '$res[0] addr is empty: check $socksizetype' );
+}
# Check actual IV integers work just as well as PV strings
( $err, @res ) = getaddrinfo( "127.0.0.1", 80, { socktype => SOCK_STREAM } );