@@ -7,7 +7,7 @@ import Control.Monad
77import Data.Int
88import Network.Socket
99 ( AddrInfo, AddrInfoFlag (AI_PASSIVE), HostName, ServiceName, Socket
10− , SocketType (Stream), SocketOption (ReuseAddr)
10+ , SocketType (Stream), SocketOption (ReuseAddr, NoDelay)
1111 , accept, addrAddress, addrFlags, addrFamily, bindSocket, defaultProtocol
1212 , defaultHints
1313 , getAddrInfo, listen, setSocketOption, socket, sClose, withSocketsDo )
@@ -36,10 +36,10 @@ passive :: Maybe AddrInfo
3636passive = Just (defaultHints { addrFlags = [AI_PASSIVE] })
3737
3838main = do
39− [pingsStr] <- getArgs
40− serverReady <- newEmptyMVar
41− clientReady <- newEmptyMVar
42− clientDone <- newEmptyMVar
39+ pingsStr:args <- getArgs
40+ serverReady <- newEmptyMVar
41+ clientReady <- newEmptyMVar
42+ clientDone <- newEmptyMVar
4343
4444 -- Start the server
4545 forkIO $ do
@@ -59,6 +59,7 @@ main = do
5959 clientAddr:_ <- getAddrInfo Nothing (Just "127.0.0.1") (Just "8081")
6060 pongSock <- socket (addrFamily clientAddr) Stream defaultProtocol
6161 N.connect pongSock (addrAddress clientAddr)
62+ when ("--NoDelay" `elem` args) $ setSocketOption pongSock NoDelay 1
6263 forever $ readChan multiplexChannel >>= send pongSock
6364
6465 -- Wait for incoming connections (pings from the client)
@@ -83,6 +84,7 @@ main = do
8384 serverAddr:_ <- getAddrInfo Nothing (Just "127.0.0.1") (Just "8080")
8485 pingSock <- socket (addrFamily serverAddr) Stream defaultProtocol
8586 N.connect pingSock (addrAddress serverAddr)
87+ when ("--NoDelay" `elem` args) $ setSocketOption pingSock NoDelay 1
8688 ping pingSock multiplexChannel (read pingsStr)
8789 putMVar clientDone ()
8890