10 use Errno qw( EACCES );
11 use Socket qw( SOL_SOCKET SO_REUSEADDR SO_REUSEPORT SO_BROADCAST );
14 local $TODO = "SO_REUSEADDR doesn't appear to work on cygwin smokers" if $^O eq "cygwin";
15 # I honestly have no idea why this fails, and people don't seem to be able
16 # to reproduce it on a development box. I'll mark it TODO for now until we
17 # can gain any more insight into it.
19 my $sock = IO::Socket::IP->new(
20 LocalHost => "127.0.0.1",
24 ) or die "Cannot socket() - $@";
26 ok( $sock->getsockopt( SOL_SOCKET, SO_REUSEADDR ), 'SO_REUSEADDR set' );
30 # Some OSes don't implement SO_REUSEPORT
31 skip "No SO_REUSEPORT constant", 1 unless defined eval { SO_REUSEPORT };
32 skip "No support for SO_REUSEPORT", 1 unless defined eval {
34 socket( $s, Socket::PF_INET, Socket::SOCK_STREAM, 0 ) and
35 setsockopt( $s, SOL_SOCKET, SO_REUSEPORT, 1 ) };
37 my $sock = IO::Socket::IP->new(
38 LocalHost => "127.0.0.1",
42 ) or die "Cannot socket() - $@";
44 ok( $sock->getsockopt( SOL_SOCKET, SO_REUSEPORT ), 'SO_REUSEPORT set' );
48 # Some OSes need special privileges to set SO_BROADCAST
50 my $sock = IO::Socket::IP->new(
51 LocalHost => "127.0.0.1",
55 skip "Privileges required to set broadcast on datagram socket", 1 if !$sock and $! == EACCES;
56 die "Cannot socket() - $@" unless $sock;
58 ok( $sock->getsockopt( SOL_SOCKET, SO_BROADCAST ), 'SO_BROADCAST set' );