Sha256: a4131a109f103a8330265ff25ca72b56e36a5a7bcb2f2d25d71021f3dafad377

Contents?: true

Size: 811 Bytes

Versions: 10

Compression:

Stored size: 811 Bytes

Contents

# frozen_string_literal: true

require 'socket'

module Griffin
  class Listener
    DEFAULT_BACKLOG_SIZE = 1024

    # @params host [String]
    # @params port [Integer]
    # @params backlog [Integer]
    def initialize(host, port, backlog: DEFAULT_BACKLOG_SIZE)
      @host = host
      @port = port
      @backlog = backlog
    end

    def listen(tcp_opt: true)
      @sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
      if tcp_opt
        @sock.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
      end

      @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEPORT, true)

      @sock.bind(Addrinfo.tcp(@host, @port))
      @sock.listen(@backlog)
      Griffin.logger.info("Start listening #{@host}:#{@port}")
      @sock
    end

    def close
      @sock.close
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
griffin-0.2.0 lib/griffin/listener.rb
griffin-0.1.9 lib/griffin/listener.rb
griffin-0.1.8 lib/griffin/listener.rb
griffin-0.1.7 lib/griffin/listener.rb
griffin-0.1.6 lib/griffin/listener.rb
griffin-0.1.5 lib/griffin/listener.rb
griffin-0.1.4 lib/griffin/listener.rb
griffin-0.1.3 lib/griffin/listener.rb
griffin-0.1.2 lib/griffin/listener.rb
griffin-0.1.1 lib/griffin/listener.rb