def child_process
if (@privilege.privileged_user?) then
begin
@privilege.cancel_privilege
rescue
@logger.err("error: failed to change subprocess privilege: #{$!.message} (#{$!.class}): #{$!.backtrace[0]}")
end
end
socket_queue = SocketQueue.new(@messenger_queue_length)
messenger_thgrp = start_messengers(@messenger_threads, socket_queue, @document, @logger, @access_log, MultiThreadMessenger)
while (cmd = @child_socket.read(CMD_LEN))
case (cmd)
when SEND_IO
socket = @child_socket.recv_io(TCPSocket)
socket_queue.push(socket)
@child_socket.write(RECV_IO)
when CLOSE
until (socket_queue.empty?)
sleep(0.1)
end
stop_messengers(@messenger_threads, socket_queue, messenger_thgrp)
@child_socket.write(CLOSE)
@child_socket.close
break
else
raise 'internal error.'
end
end
nil
end