From 1463f1dfe70005ca1eac16547097370f6b9c6466 Mon Sep 17 00:00:00 2001 From: akr Date: Tue, 10 Feb 2009 12:38:16 +0000 Subject: * ext/socket/lib/socket.rb (Socket.udp_server_sockets): new method. (Socket.udp_server_loop_on): new method. (Socket.udp_server_loop): new method (Socket.ip_sockets_port0): extracted from tcp_server_sockets_port0. (Socket::UDPSource): new class. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22212 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/socket/test_socket.rb | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'test/socket/test_socket.rb') diff --git a/test/socket/test_socket.rb b/test/socket/test_socket.rb index cb54540249..5b2b7b41d7 100644 --- a/test/socket/test_socket.rb +++ b/test/socket/test_socket.rb @@ -225,4 +225,38 @@ class TestSocket < Test::Unit::TestCase end + def test_udp_server + begin + ip_addrs = Socket.ip_address_list + rescue NotImplementedError + end + + sockets = Socket.udp_server_sockets(0) + port = sockets.first.local_address.ip_port + + th = Thread.new { + Socket.udp_server_loop_on(sockets) {|msg, msg_src| + break if msg == "exit" + rmsg = Marshal.dump([msg, msg_src.remote_address, msg_src.local_address]) + msg_src.reply rmsg + } + } + + ip_addrs.each {|ai| + Addrinfo.udp(ai.ip_address, port).connect {|s| + msg1 = "<<<#{ai.inspect}>>>" + s.sendmsg msg1 + msg2, addr = s.recvmsg + msg2, remote_address, local_address = Marshal.load(msg2) + assert_equal(msg1, msg2) + assert_equal(ai.ip_address, addr.ip_address) + } + } + ensure + if th + Addrinfo.udp("127.0.0.1", port).connect {|s| s.sendmsg "exit" } + th.join + end + end + end if defined?(Socket) -- cgit v1.2.3