Sha256: 33b3ffe6b6c1388aadc2ebada784f4c18b2cdbae94871258f321f8f4066223c0

Contents?: true

Size: 968 Bytes

Versions: 3

Compression:

Stored size: 968 Bytes

Contents

require 'socket'
require 'thread'

module NFS
  module SUNRPC
    class TCPServer < Server
      def initialize(programs, port = nil, host = '127.0.0.1')
        @server = ::TCPServer.new(host, port)
        @programs = hash_programs(programs)

        @thread = Thread.new do
          loop do
            Thread.new(@server.accept) do |socket|
              loop do
                frame = socket.recv(4).unpack1('N')
                len = frame & ~0x80000000
                break unless len

                data = socket.recv(len)
                result = run_procedure(data)

                if !result.nil?
                  result = [result.length | (128 << 24)].pack('N') + result
                  socket.send(result, 0)
                end
              end
            end
          end
        end

        if block_given?
          begin
            yield(self)
          ensure
            shutdown
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
nfs-rb-1.0.2 lib/nfs/sunrpc/tcp_server.rb
nfs-rb-1.0.1 lib/nfs/sunrpc/tcp_server.rb
nfs-rb-1.0.0 lib/nfs/sunrpc/tcp_server.rb