socket 0.8.1.0 → 0.8.2.0
raw patch · 5 files changed
+20/−7 lines, 5 files
Files
- CHANGELOG.md +5/−0
- platform/linux/src/System/Socket/Internal/Platform.hsc +3/−5
- socket.cabal +1/−1
- src/System/Socket.hsc +1/−0
- src/System/Socket/Internal/Message.hsc +10/−1
CHANGELOG.md view
@@ -1,3 +1,8 @@+0.8.2.0 Lars Petersen <info@lars-petersen.net> 2018-10-31++ * Issue 61: Fixed unexpected `IOError` bubbling up from `threadWaitSTM`.+ * Added message flag `msgPeek` (MSG_PEEK).+ 0.8.1.0 Lars Petersen <info@lars-petersen.net> 2018-08-13 * Issue 51: Add a `getAddress` operation for getting the local socket address.
platform/linux/src/System/Socket/Internal/Platform.hsc view
@@ -42,14 +42,12 @@ wait :: Socket f t p -> (Fd -> IO ()) -> (Fd -> IO (STM (), IO ())) -> IO () wait (Socket mfd) threadWait threadWaitSTM- | rtsSupportsBoundThreads = mapException- ( const eBadFileDescriptor :: IOError -> SocketException )- ( bracketOnError+ | rtsSupportsBoundThreads = bracketOnError ( withMVar mfd $ \fd -> do when (fd < 0) (throwIO eBadFileDescriptor) threadWaitSTM fd- ) snd ( atomically . fst )- )+ )+ snd ( atomically . fst ) `catch` (const (throwIO eBadFileDescriptor) :: IOError -> IO ()) | otherwise = do m <- newEmptyMVar bracketOnError
socket.cabal view
@@ -1,5 +1,5 @@ name: socket-version: 0.8.1.0+version: 0.8.2.0 synopsis: An extensible socket library. description: This library is a minimal cross-platform interface for
src/System/Socket.hsc view
@@ -98,6 +98,7 @@ , msgEndOfRecord , msgOutOfBand , msgWaitAll+ , msgPeek -- ** AddressInfoFlags , AddressInfoFlags () , aiAddressConfig
src/System/Socket/Internal/Message.hsc view
@@ -14,6 +14,7 @@ , msgNoSignal , msgOutOfBand , msgWaitAll+ , msgPeek ) where import Data.Bits@@ -52,7 +53,8 @@ , if msg .&. msgNoSignal /= mempty then Just "msgNoSignal" else Nothing , if msg .&. msgOutOfBand /= mempty then Just "msgOutOfBand" else Nothing , if msg .&. msgWaitAll /= mempty then Just "msgWaitAll" else Nothing- , let (MessageFlags i) = msg `xor` (Data.Monoid.mconcat [msgEndOfRecord,msgNoSignal,msgOutOfBand,msgWaitAll] .&. msg)+ , if msg .&. msgWaitAll /= mempty then Just "msgPeek" else Nothing+ , let (MessageFlags i) = msg `xor` (Data.Monoid.mconcat [msgEndOfRecord,msgNoSignal,msgOutOfBand,msgWaitAll,msgPeek] .&. msg) in if i /= 0 then Just ("MessageFlags " ++ show i) else Nothing ] y = concat $ intersperse "," $ catMaybes x@@ -111,3 +113,10 @@ msgWaitAll :: MessageFlags msgWaitAll = MessageFlags (#const MSG_WAITALL) {-# WARNING msgWaitAll "Untested: Use at your own risk!" #-}++-- | @MSG_PEEK@+--+-- A `System.Socket.receive` shall not actually remove the received+-- data from the input buffer.+msgPeek :: MessageFlags+msgPeek = MessageFlags (#const MSG_PEEK)