diff --git a/spec/ruby/library/socket/basicsocket/recvmsg_nonblock_spec.rb b/spec/ruby/library/socket/basicsocket/recvmsg_nonblock_spec.rb index 698b9e7ba5..30f74a2164 100644 --- a/spec/ruby/library/socket/basicsocket/recvmsg_nonblock_spec.rb +++ b/spec/ruby/library/socket/basicsocket/recvmsg_nonblock_spec.rb @@ -156,6 +156,7 @@ describe 'BasicSocket#recvmsg_nonblock' do describe 'the returned Array' do before do + platform_is(:freebsd) { IO.select([@socket]) } @array = @socket.recvmsg_nonblock end diff --git a/spec/ruby/library/socket/constants/constants_spec.rb b/spec/ruby/library/socket/constants/constants_spec.rb index 2d44636abd..2a218c7c5d 100644 --- a/spec/ruby/library/socket/constants/constants_spec.rb +++ b/spec/ruby/library/socket/constants/constants_spec.rb @@ -89,11 +89,22 @@ describe "Socket::Constants" do platform_is_not :windows do it 'defines SCM options' do - Socket::Constants.should have_constant('SCM_CREDENTIALS') + platform_is :freebsd do + Socket::Constants.should have_constant('SCM_CREDS') + end + platform_is_not :freebsd do + Socket::Constants.should have_constant('SCM_CREDENTIALS') + end end it 'defines error options' do consts = ["EAI_ADDRFAMILY", "EAI_NODATA"] + + # FreeBSD (11.1, at least) obsoletes EAI_ADDRFAMILY and EAI_NODATA + platform_is :freebsd do + consts = %w(EAI_MEMORY) + end + consts.each do |c| Socket::Constants.should have_constant(c) end diff --git a/spec/ruby/library/socket/socket/accept_nonblock_spec.rb b/spec/ruby/library/socket/socket/accept_nonblock_spec.rb index 201d472f16..0942ff8a90 100644 --- a/spec/ruby/library/socket/socket/accept_nonblock_spec.rb +++ b/spec/ruby/library/socket/socket/accept_nonblock_spec.rb @@ -86,6 +86,8 @@ describe 'Socket#accept_nonblock' do @client = Socket.new(family, :STREAM, 0) @client.connect(addr) + + platform_is(:freebsd) { IO.select([@server]) } end after do diff --git a/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb b/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb index 76a07e3bfb..5437e9b0bb 100644 --- a/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb +++ b/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb @@ -36,6 +36,8 @@ describe 'Socket#recvfrom_nonblock' do describe 'with data available' do before do @client.write('hello') + + platform_is(:freebsd) { IO.select([@server]) } end platform_is_not :windows do @@ -52,6 +54,8 @@ describe 'Socket#recvfrom_nonblock' do 5.times do @client.write('hello') + platform_is(:freebsd) { IO.select([@server]) } + msg, _ = @server.recvfrom_nonblock(5) msg.should == 'hello' diff --git a/spec/ruby/library/socket/socket/udp_server_recv_spec.rb b/spec/ruby/library/socket/socket/udp_server_recv_spec.rb index 05fef4bca8..f3db167b92 100644 --- a/spec/ruby/library/socket/socket/udp_server_recv_spec.rb +++ b/spec/ruby/library/socket/socket/udp_server_recv_spec.rb @@ -20,6 +20,12 @@ describe 'Socket.udp_server_recv' do @client.write('hello') + # FreeBSD sockets are not instanteous over loopback and + # will EAGAIN on recv. + platform_is :freebsd do + IO.select([@server]) + end + Socket.udp_server_recv([@server]) do |message, source| msg = message src = source diff --git a/spec/ruby/library/socket/tcpserver/initialize_spec.rb b/spec/ruby/library/socket/tcpserver/initialize_spec.rb index 2de8c764b2..9a55cf17e2 100644 --- a/spec/ruby/library/socket/tcpserver/initialize_spec.rb +++ b/spec/ruby/library/socket/tcpserver/initialize_spec.rb @@ -17,8 +17,9 @@ describe 'TCPServer#initialize' do end platform_is_not :windows do - it 'sets the hostname to 0.0.0.0' do - @server.local_address.ip_address.should == '0.0.0.0' + it 'sets the hostname to 0.0.0.0 or ::' do + a = @server.local_address + a.ip_address.should == (a.ipv6? ? '::' : '0.0.0.0') end end @@ -42,8 +43,9 @@ describe 'TCPServer#initialize' do end platform_is_not :windows do - it 'sets the hostname to 0.0.0.0' do - @server.local_address.ip_address.should == '0.0.0.0' + it 'sets the hostname to 0.0.0.0 or ::' do + a = @server.local_address + a.ip_address.should == (a.ipv6? ? '::' : '0.0.0.0') end end end diff --git a/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb b/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb index 48b7360035..8c9d598676 100644 --- a/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb +++ b/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb @@ -40,6 +40,8 @@ describe 'UDPSocket#recvfrom_nonblock' do describe 'with data available' do before do @client.write('hello') + + platform_is(:freebsd) { IO.select([@server]) } end it 'returns an Array containing the data and an Array' do