OSDN Git Service

In a case of the Errno::ECONNRESET error, the error is correctly logged to the server...
[shogi-server/shogi-server.git] / shogi-server
index 0533040..3595fc3 100755 (executable)
 $topdir = nil
 $league = nil
 $logger = nil
+$config = nil
 $:.unshift File.dirname(__FILE__)
 require 'shogi_server'
+require 'shogi_server/config'
 require 'tempfile'
 
 #################################################
@@ -183,14 +185,20 @@ end
 # Return true if the file is writable, otherwise false.
 #
 def is_writable_file?(file)
+  if File.exist?(file)
+    if FileTest.file?(file)
+      return FileTest.writable_real?(file)
+    else
+      return false
+    end
+  end
+  
   begin
     open(file, "w") {|fh| } 
+    FileUtils.rm file
   rescue
     return false
   end
-  unless FileTest.file? file
-    return false
-  end
 
   return true
 end
@@ -244,7 +252,14 @@ def login_loop(client)
   player = login = nil
  
   while r = select([client], nil, nil, ShogiServer::Login_Time) do
-    break unless str = r[0].first.gets
+    str = nil
+    begin
+      break unless str = r[0].first.gets
+    rescue Exception => ex
+      # It is posssible that the socket causes an error (ex. Errno::ECONNRESET)
+      log_error("login_loop: #{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}")
+      break
+    end
     $mutex.lock # guards $league
     begin
       str =~ /([\r\n]*)$/
@@ -329,6 +344,7 @@ def main
   
   $options = parse_command_line
   check_command_line
+  $config = ShogiServer::Config.new $options
 
   $league = ShogiServer::League.new($topdir)