@@ -7,7 +7,7 @@ import Control.Monad
7import Data.Int
7import Data.Int
8import Network.Socket
8import Network.Socket
9 ( AddrInfo, AddrInfoFlag (AI_PASSIVE), HostName, ServiceName, Socket
9 ( AddrInfo, AddrInfoFlag (AI_PASSIVE), HostName, ServiceName, Socket
10− , SocketType (Stream), SocketOption (ReuseAddr)
10+ , SocketType (Stream), SocketOption (ReuseAddr, NoDelay)
11 , accept, addrAddress, addrFlags, addrFamily, bindSocket, defaultProtocol
11 , accept, addrAddress, addrFlags, addrFamily, bindSocket, defaultProtocol
12 , defaultHints
12 , defaultHints
13 , getAddrInfo, listen, setSocketOption, socket, sClose, withSocketsDo )
13 , getAddrInfo, listen, setSocketOption, socket, sClose, withSocketsDo )
@@ -36,10 +36,10 @@ passive :: Maybe AddrInfo
36passive = Just (defaultHints { addrFlags = [AI_PASSIVE] })
36passive = Just (defaultHints { addrFlags = [AI_PASSIVE] })
39− [pingsStr] <- getArgs
39+ pingsStr:args <- getArgs
40− serverReady <- newEmptyMVar
40+ serverReady <- newEmptyMVar
41− clientReady <- newEmptyMVar
41+ clientReady <- newEmptyMVar
42− clientDone <- newEmptyMVar
42+ clientDone <- newEmptyMVar
44 -- Start the server
44 -- Start the server
45 forkIO $ do
45 forkIO $ do
@@ -59,6 +59,7 @@ main = do
59 clientAddr:_ <- getAddrInfo Nothing (Just "127.0.0.1") (Just "8081")
59 clientAddr:_ <- getAddrInfo Nothing (Just "127.0.0.1") (Just "8081")
60 pongSock <- socket (addrFamily clientAddr) Stream defaultProtocol
60 pongSock <- socket (addrFamily clientAddr) Stream defaultProtocol
61 N.connect pongSock (addrAddress clientAddr)
61 N.connect pongSock (addrAddress clientAddr)
62+ when ("--NoDelay" `elem` args) $ setSocketOption pongSock NoDelay 1
62 forever $ readChan multiplexChannel >>= send pongSock
63 forever $ readChan multiplexChannel >>= send pongSock
64 -- Wait for incoming connections (pings from the client)
65 -- Wait for incoming connections (pings from the client)
@@ -83,6 +84,7 @@ main = do
83 serverAddr:_ <- getAddrInfo Nothing (Just "127.0.0.1") (Just "8080")
84 serverAddr:_ <- getAddrInfo Nothing (Just "127.0.0.1") (Just "8080")
84 pingSock <- socket (addrFamily serverAddr) Stream defaultProtocol
85 pingSock <- socket (addrFamily serverAddr) Stream defaultProtocol
85 N.connect pingSock (addrAddress serverAddr)
86 N.connect pingSock (addrAddress serverAddr)
87+ when ("--NoDelay" `elem` args) $ setSocketOption pingSock NoDelay 1
86 ping pingSock multiplexChannel (read pingsStr)
88 ping pingSock multiplexChannel (read pingsStr)
87 putMVar clientDone ()
89 putMVar clientDone ()