diff options
Diffstat (limited to 'vendor/thrift/transport/socket.rb')
| -rw-r--r-- | vendor/thrift/transport/socket.rb | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/vendor/thrift/transport/socket.rb b/vendor/thrift/transport/socket.rb deleted file mode 100644 index 9bb2036..0000000 --- a/vendor/thrift/transport/socket.rb +++ /dev/null @@ -1,137 +0,0 @@ -# encoding: ascii-8bit -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -require 'socket' - -module Thrift - class Socket < BaseTransport - def initialize(host='localhost', port=9090, timeout=nil) - @host = host - @port = port - @timeout = timeout - @desc = "#{host}:#{port}" - @handle = nil - end - - attr_accessor :handle, :timeout - - def open - begin - addrinfo = ::Socket::getaddrinfo(@host, @port).first - @handle = ::Socket.new(addrinfo[4], ::Socket::SOCK_STREAM, 0) - sockaddr = ::Socket.sockaddr_in(addrinfo[1], addrinfo[3]) - begin - @handle.connect_nonblock(sockaddr) - rescue Errno::EINPROGRESS - unless IO.select(nil, [ @handle ], nil, @timeout) - raise TransportException.new(TransportException::NOT_OPEN, "Connection timeout to #{@desc}") - end - begin - @handle.connect_nonblock(sockaddr) - rescue Errno::EISCONN - end - end - @handle - rescue StandardError => e - raise TransportException.new(TransportException::NOT_OPEN, "Could not connect to #{@desc}: #{e}") - end - end - - def open? - !@handle.nil? and !@handle.closed? - end - - def write(str) - raise IOError, "closed stream" unless open? - begin - if @timeout.nil? or @timeout == 0 - @handle.write(str) - else - len = 0 - start = Time.now - while Time.now - start < @timeout - rd, wr, = IO.select(nil, [@handle], nil, @timeout) - if wr and not wr.empty? - len += @handle.write_nonblock(str[len..-1]) - break if len >= str.length - end - end - if len < str.length - raise TransportException.new(TransportException::TIMED_OUT, "Socket: Timed out writing #{str.length} bytes to #{@desc}") - else - len - end - end - rescue TransportException => e - # pass this on - raise e - rescue StandardError => e - @handle.close - @handle = nil - raise TransportException.new(TransportException::NOT_OPEN, e.message) - end - end - - def read(sz) - raise IOError, "closed stream" unless open? - - begin - if @timeout.nil? or @timeout == 0 - data = @handle.readpartial(sz) - else - # it's possible to interrupt select for something other than the timeout - # so we need to ensure we've waited long enough, but not too long - start = Time.now - timespent = 0 - rd = loop do - rd, = IO.select([@handle], nil, nil, @timeout - timespent) - timespent = Time.now - start - break rd if (rd and not rd.empty?) or timespent >= @timeout - end - if rd.nil? or rd.empty? - raise TransportException.new(TransportException::TIMED_OUT, "Socket: Timed out reading #{sz} bytes from #{@desc}") - else - data = @handle.readpartial(sz) - end - end - rescue TransportException => e - # don't let this get caught by the StandardError handler - raise e - rescue StandardError => e - @handle.close unless @handle.closed? - @handle = nil - raise TransportException.new(TransportException::NOT_OPEN, e.message) - end - if (data.nil? or data.length == 0) - raise TransportException.new(TransportException::UNKNOWN, "Socket: Could not read #{sz} bytes from #{@desc}") - end - data - end - - def close - @handle.close unless @handle.nil? or @handle.closed? - @handle = nil - end - - def to_io - @handle - end - end -end
\ No newline at end of file |
