gameServer/hedgewars-server.hs
changeset 4568 f85243bf890e
parent 4295 1f5604cd99be
child 4904 0eab727d4717
--- a/gameServer/hedgewars-server.hs	Sun Dec 19 20:45:15 2010 +0300
+++ b/gameServer/hedgewars-server.hs	Sun Dec 19 13:31:55 2010 -0500
@@ -2,15 +2,23 @@
 
 module Main where
 
-import Network
+import Network.Socket
+import qualified Network
+import Network.BSD
 import Control.Concurrent.STM
 import Control.Concurrent.Chan
+#if defined(NEW_EXCEPTIONS)
+import qualified Control.OldException as Exception
+#else
 import qualified Control.Exception as Exception
+#endif
 import System.Log.Logger
 -----------------------------------
 import Opts
 import CoreTypes
+import OfficialServer.DBInteraction
 import ServerCore
+import Utils
 
 
 #if !defined(mingw32_HOST_OS)
@@ -18,12 +26,10 @@
 #endif
 
 
-setupLoggers :: IO ()
 setupLoggers =
     updateGlobalLogger "Clients"
         (setLevel INFO)
 
-main :: IO ()
 main = withSocketsDo $ do
 #if !defined(mingw32_HOST_OS)
     installHandler sigPIPE Ignore Nothing;
@@ -32,11 +38,11 @@
 
     setupLoggers
 
-    stats' <- atomically $ newTMVar (StatisticsInfo 0 0)
+    stats <- atomically $ newTMVar (StatisticsInfo 0 0)
     dbQueriesChan <- newChan
-    coreChan' <- newChan
-    serverInfo' <- getOpts $ newServerInfo stats' coreChan' dbQueriesChan
-
+    coreChan <- newChan
+    serverInfo' <- getOpts $ newServerInfo stats coreChan dbQueriesChan
+    
 #if defined(OFFICIAL_SERVER)
     dbHost' <- askFromConsole "DB host: "
     dbLogin' <- askFromConsole "login: "
@@ -46,7 +52,14 @@
     let serverInfo = serverInfo'
 #endif
 
+
+    proto <- getProtocolNumber "tcp"
     Exception.bracket
-        (Network.listenOn $ Network.PortNumber $ listenPort serverInfo)
+        (socket AF_INET Stream proto)
         sClose
-        (startServer serverInfo)
+        (\sock -> do
+            setSocketOption sock ReuseAddr 1
+            bindSocket sock (SockAddrInet (listenPort serverInfo) iNADDR_ANY)
+            listen sock maxListenQueue
+            startServer serverInfo sock
+        )