summaryrefslogtreecommitdiff
path: root/test/socket/test_socket.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/socket/test_socket.rb')
-rw-r--r--test/socket/test_socket.rb34
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)