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