Skip to content

Commit 3da2c21

Browse files
committed
adding the STM module.
1 parent b6ffeff commit 3da2c21

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

Network/Socket.hs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,12 @@ module Network.Socket (
382382

383383
-- * Special constants
384384
maxListenQueue,
385+
386+
-- * STM to check read and write
387+
waitReadSocketSTM,
388+
waitAndCancelReadSocketSTM,
389+
waitWriteSocketSTM,
390+
waitAndCancelWriteSocketSTM,
385391
) where
386392

387393
import Network.Socket.Buffer hiding (
@@ -399,6 +405,7 @@ import Network.Socket.Info
399405
import Network.Socket.Internal
400406
import Network.Socket.Name hiding (getPeerName, getSocketName)
401407
import Network.Socket.Options
408+
import Network.Socket.STM
402409
import Network.Socket.Shutdown
403410
import Network.Socket.SockAddr
404411
import Network.Socket.Syscall hiding (accept, bind, connect)

Network/Socket/STM.hs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module Network.Socket.STM where
2+
3+
import Control.Concurrent
4+
import Control.Concurrent.STM
5+
import Network.Socket.Types
6+
import System.Posix.Types
7+
8+
-- | STM action to wait until the socket is ready for reading.
9+
waitReadSocketSTM :: Socket -> IO (STM ())
10+
waitReadSocketSTM s = fst <$> waitAndCancelReadSocketSTM s
11+
12+
-- | STM action to wait until the socket is ready for reading and STM
13+
-- action to cancel the waiting.
14+
waitAndCancelReadSocketSTM :: Socket -> IO (STM (), IO ())
15+
waitAndCancelReadSocketSTM s = withFdSocket s $ threadWaitReadSTM . Fd
16+
17+
-- | STM action to wait until the socket is ready for writing.
18+
waitWriteSocketSTM :: Socket -> IO (STM ())
19+
waitWriteSocketSTM s = fst <$> waitAndCancelWriteSocketSTM s
20+
21+
-- | STM action to wait until the socket is ready for writing and STM
22+
-- action to cancel the waiting.
23+
waitAndCancelWriteSocketSTM :: Socket -> IO (STM (), IO ())
24+
waitAndCancelWriteSocketSTM s = withFdSocket s $ threadWaitWriteSTM . Fd

network.cabal

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ library
115115
Network.Socket.Name
116116
Network.Socket.Options
117117
Network.Socket.ReadShow
118+
Network.Socket.STM
118119
Network.Socket.Shutdown
119120
Network.Socket.SockAddr
120121
Network.Socket.Syscall
@@ -132,7 +133,8 @@ library
132133
base >=4.9 && <5,
133134
bytestring >=0.10,
134135
deepseq,
135-
directory
136+
directory,
137+
stm
136138

137139
if !os(windows)
138140
other-modules:

0 commit comments

Comments
 (0)