From c34d7d75fb4f383182f1fab70cb18c6da9b662e3 Mon Sep 17 00:00:00 2001 From: Jake Farrell Date: Fri, 28 Sep 2012 11:25:42 +0000 Subject: [PATCH] THRIFT-1591: Enable TCP_NODELAY for ruby gem Client: rb Patch: Christos Trochalakis Set TCP_NODELAY for client socket for ruby lib git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1391399 13f79535-47bb-0310-9956-ffa450edef68 --- lib/rb/lib/thrift/transport/socket.rb | 1 + lib/rb/spec/socket_spec.rb | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/rb/lib/thrift/transport/socket.rb b/lib/rb/lib/thrift/transport/socket.rb index dfb33fdb..36461e9a 100644 --- a/lib/rb/lib/thrift/transport/socket.rb +++ b/lib/rb/lib/thrift/transport/socket.rb @@ -36,6 +36,7 @@ module Thrift begin addrinfo = ::Socket::getaddrinfo(@host, @port, nil, ::Socket::SOCK_STREAM).first @handle = ::Socket.new(addrinfo[4], ::Socket::SOCK_STREAM, 0) + @handle.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1) sockaddr = ::Socket.sockaddr_in(addrinfo[1], addrinfo[3]) begin @handle.connect_nonblock(sockaddr) diff --git a/lib/rb/spec/socket_spec.rb b/lib/rb/spec/socket_spec.rb index ef8a0a11..e6b6732f 100644 --- a/lib/rb/spec/socket_spec.rb +++ b/lib/rb/spec/socket_spec.rb @@ -28,6 +28,7 @@ describe 'Socket' do @handle = mock("Handle", :closed? => false) @handle.stub!(:close) @handle.stub!(:connect_nonblock) + @handle.stub!(:setsockopt) ::Socket.stub!(:new).and_return(@handle) end @@ -39,14 +40,14 @@ describe 'Socket' do end it "should open a ::Socket with default args" do - ::Socket.should_receive(:new).and_return(mock("Handle", :connect_nonblock => true)) + ::Socket.should_receive(:new).and_return(mock("Handle", :connect_nonblock => true, :setsockopt => nil)) ::Socket.should_receive(:getaddrinfo).with("localhost", 9090, nil, ::Socket::SOCK_STREAM).and_return([[]]) ::Socket.should_receive(:sockaddr_in) @socket.open end it "should accept host/port options" do - ::Socket.should_receive(:new).and_return(mock("Handle", :connect_nonblock => true)) + ::Socket.should_receive(:new).and_return(mock("Handle", :connect_nonblock => true, :setsockopt => nil)) ::Socket.should_receive(:getaddrinfo).with("my.domain", 1234, nil, ::Socket::SOCK_STREAM).and_return([[]]) ::Socket.should_receive(:sockaddr_in) Thrift::Socket.new('my.domain', 1234).open -- 2.17.1