lib/websocket-client-simple/client.rb in websocket-client-simple-0.2.4 vs lib/websocket-client-simple/client.rb in websocket-client-simple-0.2.5

- old
+ new

@@ -16,15 +16,20 @@ @socket = TCPSocket.new(uri.host, uri.port || (uri.scheme == 'wss' ? 443 : 80)) if ['https', 'wss'].include? uri.scheme ctx = OpenSSL::SSL::SSLContext.new ctx.ssl_version = options[:ssl_version] || 'SSLv23' + ctx.verify_mode = options[:verify_mode] || OpenSSL::SSL::VERIFY_NONE #use VERIFY_PEER for verification + cert_store = OpenSSL::X509::Store.new + cert_store.set_default_paths + ctx.cert_store = cert_store @socket = ::OpenSSL::SSL::SSLSocket.new(@socket, ctx) @socket.connect end @handshake = ::WebSocket::Handshake::Client.new :url => url, :headers => options[:headers] @handshaked = false + @pipe_broken = false frame = ::WebSocket::Frame::Incoming::Client.new @closed = false once :__close do |err| close emit :close, err @@ -63,16 +68,19 @@ type = opt[:type] frame = ::WebSocket::Frame::Outgoing::Client.new(:data => data, :type => type, :version => @handshake.version) begin @socket.write frame.to_s rescue Errno::EPIPE => e + @pipe_broken = true emit :__close, e end end def close return if @closed - send nil, :type => :close + if !@pipe_broken + send nil, :type => :close + end @closed = true @socket.close if @socket @socket = nil emit :__close Thread.kill @thread if @thread