1# test ENOTCONN for splicing to unconnected udp socket
2
3use strict;
4use warnings;
5use IO::Socket;
6use BSD::Socket::Splice "SO_SPLICE";
7
8our %args = (
9    errno => 'ENOTCONN',
10    func => sub {
11	my $sb = IO::Socket::INET->new(
12	    Proto => "udp",
13	    LocalAddr => "127.0.0.1",
14	) or die "socket bind failed: $!";
15
16	my $sc = IO::Socket::INET->new(
17	    Proto => "udp",
18	    PeerAddr => $sb->sockhost(),
19	    PeerPort => $sb->sockport(),
20	) or die "socket connect failed: $!";
21
22	$sb->setsockopt(SOL_SOCKET, SO_SPLICE, pack('i', $sc->fileno()))
23	    or die "splice from unconnected socket failed: $!";
24	$sc->setsockopt(SOL_SOCKET, SO_SPLICE, pack('i', $sb->fileno()))
25	    and die "splice to unconnected socket succeeded";
26    },
27);
28