@@ -63,14 +63,7 @@ gracefulClose s tmout = sendRecvFIN `E.finally` close s
6363 shutdown s ShutdownSend
6464 -- Waiting TCP FIN.
6565 E. bracket (mallocBytes bufSize) free $ \ buf -> do
66- #if defined(mingw32_HOST_OS)
6766 {-# SCC "" #-} recvEOFloop buf
68- #else
69- mevmgr <- Ev. getSystemEventManager
70- case mevmgr of
71- Nothing -> recvEOFloop buf -- non-threaded RTS
72- Just evmgr -> recvEOFev evmgr buf
73- #endif
7467 -- milliseconds. Taken from BSD fast clock value.
7568 clock = 200
7669 recvEOFloop buf = loop 0
@@ -86,35 +79,6 @@ gracefulClose s tmout = sendRecvFIN `E.finally` close s
8679 when (r == - 1 && delay' < tmout) $ do
8780 threadDelay (clock * 1000 )
8881 loop delay'
89- #if !defined(mingw32_HOST_OS)
90- recvEOFev evmgr buf = do
91- -- Checking if FIN is already received.
92- r <- recvBufNoWait s buf bufSize
93- when (r == - 1 ) $ do
94- tmmgr <- Ev. getSystemTimerManager
95- mvar <- newEmptyMVar
96- E. bracket (register evmgr tmmgr mvar) (unregister evmgr tmmgr) $ \ _ -> do
97- wait <- takeMVar mvar
98- case wait of
99- TimeoutTripped -> return ()
100- MoreData -> void $ recvBufNoWait s buf bufSize
101- register evmgr tmmgr mvar = do
102- -- millisecond to microsecond
103- key1 <- Ev. registerTimeout tmmgr (tmout * 1000 ) $
104- void $ tryPutMVar mvar TimeoutTripped
105- key2 <- withFdSocket s $ \ fd' -> do
106- let callback _ _ = void $ tryPutMVar mvar MoreData
107- fd = Fd fd'
108- #if __GLASGOW_HASKELL__ < 709
109- Ev. registerFd evmgr callback fd Ev. evtRead
110- #else
111- Ev. registerFd evmgr callback fd Ev. evtRead Ev. OneShot
112- #endif
113- return (key1, key2)
114- unregister evmgr tmmgr (key1,key2) = do
115- Ev. unregisterTimeout tmmgr key1
116- Ev. unregisterFd evmgr key2
117- #endif
11882 -- Don't use 4092 here. The GHC runtime takes the global lock
11983 -- if the length is over 3276 bytes in 32bit or 3272 bytes in 64bit.
12084 bufSize = 1024
0 commit comments