25 def serve
26 @server_transport.listen
27 loop do
28 begin
29 client = @server_transport.accept
30 rescue Errno::ECONNRESET, Errno::EPIPE
31 next
32 rescue => e
33 next if defined?(OpenSSL::SSL::SSLError) && e.is_a?(OpenSSL::SSL::SSLError)
34 raise
35 end
36 trans = @transport_factory.get_transport(client)
37 prot = @protocol_factory.get_protocol(trans)
38 Thread.new(prot, trans) do |p, t|
39 loop do
40 @processor.process(p, p)
41 end
42 rescue Thrift::TransportException, Thrift::ProtocolException
43 ensure
44 t.close
45 end
46 end
47 ensure
48 @server_transport.close
49 end