diff options
Diffstat (limited to 'test/socket')
-rw-r--r-- | test/socket/test_socket.rb | 34 |
1 files changed, 34 insertions, 0 deletions
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) |