Sha256: 96038d3da8e25e6c1a5fe56038277fe63a44461bdd6481a8085bd4d0efac00b0

Contents?: true

Size: 930 Bytes

Versions: 3

Compression:

Stored size: 930 Bytes

Contents

require 'net/socket/version'
require 'socket'

module Net::Socket::TCP
  class Server < TCPServer
    def each_request(async = false, &block)
      if async
        each_request_async(&block)
      else
        each_request_sync(&block)
      end
    end

    def wait
      IO.select([socket]) until socket.closed?
    rescue
      # We don't care about IO.select-related exceptions,
      # so we just ignore them and return.
    end

    private
    def each_request_sync(&block)
      loop { handle_request(accept(), &block) }
    end

    def each_request_async(&block)
      Thread.new do
        loop do
          Thread.new(accept(), block) do |request, block|
            handle_request(request, &block)
          end
        end
      end

      # Return nil to avoid collecting references to Threads.
      nil
    end

    def handle_request(request, &block)
      yield request

      request.close
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
net-socket-1.0.1 lib/net/socket/tcp/server.rb
net-socket-1.0.0 lib/net/socket/tcp/server.rb
net-socket-0.0.1 lib/net/socket/tcp/server.rb