diff options
Diffstat (limited to 'regress/sys/kern/sosplice/error/args-splice-EBUSY.pl')
-rw-r--r-- | regress/sys/kern/sosplice/error/args-splice-EBUSY.pl | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/regress/sys/kern/sosplice/error/args-splice-EBUSY.pl b/regress/sys/kern/sosplice/error/args-splice-EBUSY.pl new file mode 100644 index 00000000000..a5ad9f40116 --- /dev/null +++ b/regress/sys/kern/sosplice/error/args-splice-EBUSY.pl @@ -0,0 +1,41 @@ +# test EBUSY for splicing to a spliced socket + +use strict; +use warnings; +use IO::Socket; +use BSD::Socket::Splice "SO_SPLICE"; + +our %args = ( + errno => 'EBUSY', + func => sub { + my $sl = IO::Socket::INET->new( + Proto => "tcp", + Listen => 5, + LocalAddr => "127.0.0.1", + ) or die "socket listen failed: $!"; + + my $s = IO::Socket::INET->new( + Proto => "tcp", + PeerAddr => $sl->sockhost(), + PeerPort => $sl->sockport(), + ) or die "socket connect failed: $!"; + + my $ss = IO::Socket::INET->new( + Proto => "tcp", + PeerAddr => $sl->sockhost(), + PeerPort => $sl->sockport(), + ) or die "socket splice connect failed: $!"; + + $s->setsockopt(SOL_SOCKET, SO_SPLICE, pack('i', $ss->fileno())) + or die "splice failed: $!"; + + my $so = IO::Socket::INET->new( + Proto => "tcp", + PeerAddr => $sl->sockhost(), + PeerPort => $sl->sockport(), + ) or die "socket other failed: $!"; + + $so->setsockopt(SOL_SOCKET, SO_SPLICE, pack('i', $ss->fileno())) + and die "splice to spliced socket succeeded"; + }, +); |