args-max-EINVAL.pl revision 1.1
1# test EINVAL for splicing with negative maximum
2
3use strict;
4use warnings;
5use IO::Socket;
6use BSD::Socket::Splice "SO_SPLICE";
7use Config;
8
9our %args = (
10    errno => 'EINVAL',
11    func => sub {
12	my $sl = IO::Socket::INET->new(
13	    Proto => "tcp",
14	    Listen => 5,
15	    LocalAddr => "127.0.0.1",
16	) or die "socket listen failed: $!";
17
18	my $s = IO::Socket::INET->new(
19	    Proto => "tcp",
20	    PeerAddr => $sl->sockhost(),
21	    PeerPort => $sl->sockport(),
22	) or die "socket failed: $!";
23
24	my $ss = IO::Socket::INET->new(
25	    Proto => "tcp",
26	    PeerAddr => $sl->sockhost(),
27	    PeerPort => $sl->sockport(),
28	) or die "socket splice failed: $!";
29
30	my $packed;
31	if ($Config{longsize} == 8) {
32	    $packed = pack('iiiiiiii', $ss->fileno(),0,-1,-1,0,0,0,0);
33	} else {
34	    $packed = pack('iiiii', $ss->fileno(),-1,-1,0,0);
35	}
36	$s->setsockopt(SOL_SOCKET, SO_SPLICE, $packed)
37	    and die "splice to unconnected socket succeeded";
38    },
39);
40