Sha256: 0df4ef6f6eaf1ced738820e8a9d14f4e97717a9d3b2c28508d99139876d339da

Contents?: true

Size: 955 Bytes

Versions: 2

Compression:

Stored size: 955 Bytes

Contents

require 'socket'
require 'thread'

module NFS
  module SUNRPC
    class UDPServer < Server
      UDPRecvMTU = 10000

      def initialize(programs, port = nil, host = '127.0.0.1')
        @socket = UDPSocket.open
        @socket.bind(host, port)
        socketmutex = Mutex.new
        @programs = hash_programs(programs)

        @thread = Thread.new do
          loop do
            request = @socket.recvfrom(UDPRecvMTU)
            data = request[0]
            port = request[1][1]
            host = request[1][3]

            Thread.new do
              result = run_procedure(data)

              if !result.nil?
                socketmutex.synchronize do
                  @socket.send(result, 0, host, port)
                end
              end
            end
          end
        end

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
nfs-rb-1.0.2 lib/nfs/sunrpc/udp_server.rb
nfs-rb-1.0.1 lib/nfs/sunrpc/udp_server.rb