# File lib/pusher-client/websocket.rb, line 14
    def initialize(url, params = {})
      @hs ||= WebSocket::Handshake::Client.new(:url => url)
      @frame ||= WebSocket::Frame::Incoming::Server.new(:version => @hs.version)
      @socket = TCPSocket.new(@hs.host, @hs.port || 80)
      @cert_file = params[:cert_file]
      @logger = params[:logger] || PusherClient.logger

      if params[:ssl] == true
        ctx = OpenSSL::SSL::SSLContext.new
        if params[:ssl_verify]
          ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
          # http://curl.haxx.se/ca/cacert.pem
          ctx.ca_file = @cert_file || CA_FILE
        else
          ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
        end

        ssl_sock = OpenSSL::SSL::SSLSocket.new(@socket, ctx)
        ssl_sock.sync_close = true
        ssl_sock.connect

        @socket = ssl_sock
      end

      @socket.write(@hs.to_s)
      @socket.flush

      loop do
        data = @socket.getc
        next if data.nil?

        @hs << data

        if @hs.finished?
          raise @hs.error.to_s unless @hs.valid?
          @handshaked = true
          break
        end
      end
    end