diff --git a/src/ATrade/Broker/Client.hs b/src/ATrade/Broker/Client.hs index 60c3164..54cefdc 100644 --- a/src/ATrade/Broker/Client.hs +++ b/src/ATrade/Broker/Client.hs @@ -55,6 +55,7 @@ brokerClientThread ctx ep cmd resp comp killMv secParams = finally brokerClientT throwIO e else do putMVar resp (ResponseError "Response error")) $ withSocket ctx Req (\sock -> do + setLinger (restrict 0) sock debugM "Broker.Client" $ "Connecting to: " ++ show (T.unpack ep) case cspCertificate secParams of Just clientCert -> zapApplyCertificate clientCert sock diff --git a/src/ATrade/Broker/Server.hs b/src/ATrade/Broker/Server.hs index 8830b43..da1ccb2 100644 --- a/src/ATrade/Broker/Server.hs +++ b/src/ATrade/Broker/Server.hs @@ -58,6 +58,7 @@ data BrokerServerHandle = BrokerServerHandle ThreadId ThreadId (MVar ()) (MVar ( startBrokerServer :: [BrokerInterface] -> Context -> T.Text -> T.Text -> ServerSecurityParams -> IO BrokerServerHandle startBrokerServer brokers c ep tradeSinkEp params = do sock <- socket c Router + setLinger (restrict 0) sock case sspDomain params of Just domain -> setZapDomain domain sock Nothing -> return () @@ -109,6 +110,7 @@ tradeSinkHandler :: Context -> IORef BrokerServerState -> T.Text -> IO () tradeSinkHandler c state tradeSinkEp = when (tradeSinkEp /= "") $ whileM_ (not <$> wasKilled) $ withSocket c Dealer (\sock -> do + setLinger (restrict 0) sock chan <- tradeSink <$> readIORef state connect sock $ T.unpack tradeSinkEp timeoutMv <- newEmptyMVar diff --git a/src/ATrade/QuoteSource/Client.hs b/src/ATrade/QuoteSource/Client.hs index e690d20..f5bba8a 100644 --- a/src/ATrade/QuoteSource/Client.hs +++ b/src/ATrade/QuoteSource/Client.hs @@ -51,6 +51,7 @@ startQuoteSourceClient chan tickers ctx endpoint = do return QuoteSourceClientHandle { tid = tid, completionMvar = compMv, killMVar = killMv } where clientThread lastHeartbeat killMv = whileM_ (isNothing <$> tryReadMVar killMv) $ withSocket ctx Sub (\sock -> do + setLinger (restrict 0) sock connect sock $ T.unpack endpoint debugM "QuoteSource.Client" $ "Tickers: " ++ show tickers mapM_ (subscribe sock . encodeUtf8) tickers diff --git a/src/ATrade/QuoteSource/Server.hs b/src/ATrade/QuoteSource/Server.hs index 3d9afbb..ff66d72 100644 --- a/src/ATrade/QuoteSource/Server.hs +++ b/src/ATrade/QuoteSource/Server.hs @@ -82,6 +82,7 @@ serverThread state = do startQuoteSourceServer :: BoundedChan QuoteSourceServerData -> Context -> T.Text -> IO QuoteSourceServer startQuoteSourceServer chan c ep = do sock <- socket c Pub + setLinger (restrict 0) sock bind sock $ T.unpack ep tid <- myThreadId hbTid <- forkIO $ forever $ do