From 9cfd094e6d0a842551c1c58e998eb057cd8425e3 Mon Sep 17 00:00:00 2001 From: "H.Merijn Brand" Date: Thu, 4 Aug 2011 09:20:32 +0200 Subject: 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. --- ext/Socket/t/getaddrinfo.t | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'ext') 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 } ); -- cgit v1.2.1