Sha256: e69bd81d66a366c8a47608e2496b96828f897d7c85ee19f0fa18061e16d7e9ee

Contents?: true

Size: 1.25 KB

Versions: 2

Compression:

Stored size: 1.25 KB

Contents

module Thin
  module Connectors
    # Connectior to act as a UNIX domain socket server.
    class UnixServer < Connector
      # UNIX domain socket on which the server is listening for connections.
      attr_accessor :socket
      
      def initialize(socket)
        raise PlatformNotSupported, 'UNIX sockets not available on Windows' if Thin.win?
        @socket = socket
        super()
      end
      
      # Connect the server
      def connect
        at_exit { remove_socket_file } # In case it crashes
        @signature = EventMachine.start_unix_domain_server(@socket, UnixConnection, &method(:initialize_connection))
      end
      
      # Stops the server
      def disconnect
        EventMachine.stop_server(@signature)
      end
      
      # Free up resources used by the connector.
      def close
        remove_socket_file
      end
      
      def to_s
        @socket
      end
      
      protected
        def remove_socket_file
          File.delete(@socket) if @socket && File.exist?(@socket)
        end
    end    
  end

  class UnixConnection < Connection
    protected
      def remote_address
        # FIXME not sure about this, does it even make sense on a UNIX socket?
        Socket.unpack_sockaddr_un(get_peername)
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
thin-0.6.3-x86-mswin32-60 lib/thin/connectors/unix_server.rb
thin-0.6.3 lib/thin/connectors/unix_server.rb