about summary refs log tree commit homepage
path: root/test/test_server.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_server.rb')
-rw-r--r--test/test_server.rb20
1 files changed, 20 insertions, 0 deletions
diff --git a/test/test_server.rb b/test/test_server.rb
index 0410f65..50e739a 100644
--- a/test/test_server.rb
+++ b/test/test_server.rb
@@ -845,4 +845,24 @@ class TestServer < Testcase
   ensure
     quit_wait(pid)
   end
+
+  def test_inherit_tcp_nodelay_set
+    err = @err
+    cfg = Yahns::Config.new
+    host, port = @srv.addr[3], @srv.addr[1]
+    @srv.setsockopt(:IPPROTO_TCP, :TCP_NODELAY, 0)
+    assert_equal 0, @srv.getsockopt(:IPPROTO_TCP, :TCP_NODELAY).int
+    cfg.instance_eval do
+      ru = lambda { |_| [ 200, { 'Content-Length' => '2' } , [ 'HI' ] ] }
+      GTL.synchronize { app(:rack, ru) { listen "#{host}:#{port}" } }
+      logger(Logger.new(err.path))
+    end
+    pid = mkserver(cfg, @srv) { ENV["YAHNS_FD"] = "#{@srv.fileno}" }
+    run_client(host, port) { |res| assert_equal "HI", res.body }
+
+    # TCP socket option is shared at file level, not FD level:
+    assert_equal 1, @srv.getsockopt(:IPPROTO_TCP, :TCP_NODELAY).int
+  ensure
+    quit_wait(pid)
+  end
 end