23 def serve
24 @server_transport.listen
25 loop do
26 begin
27 client = @server_transport.accept
28 rescue Errno::ECONNRESET, Errno::EPIPE
29 next
30 rescue => e
31 next if defined?(OpenSSL::SSL::SSLError) && e.is_a?(OpenSSL::SSL::SSLError)
32 raise
33 end
34 trans = @transport_factory.get_transport(client)
35 prot = @protocol_factory.get_protocol(trans)
36 begin
37 loop do
38 @processor.process(prot, prot)
39 end
40 rescue Thrift::TransportException, Thrift::ProtocolException
41
42
43 rescue => e
44
45
46 @logger.error("Error while serving a client connection: #{e.inspect}")
47 ensure
48 trans.close
49 end
50 end
51 ensure
52 @server_transport.close
53 end