packages feed

network 3.1.3.0 → 3.1.4.0

raw patch · 11 files changed

+212/−157 lines, 11 filesdep ~bytestringPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: bytestring

API changes (from Hackage documentation)

+ Network.Socket: SocketTimeout :: Word32 -> SocketTimeout
+ Network.Socket: newtype SocketTimeout

Files

CHANGELOG.md view
@@ -1,3 +1,12 @@+## Version 3.1.4.0++* Install and use afunix_compat.h header.+  [#556](https://github.com/haskell/network/pull/556)+* Supporting SO_SNDTIMEO and SO_RCVTIMEO.+  [#555](https://github.com/haskell/network/pull/555)+* Emulating socketPair on Windows.+  [#554](https://github.com/haskell/network/pull/554)+ ## Version 3.1.3.0  * Supporting AF_UNIX on Windows
Network/Socket.hs view
@@ -143,6 +143,7 @@                   ,RecvIPv4TTL,RecvIPv4TOS,RecvIPv4PktInfo                   ,RecvIPv6HopLimit,RecvIPv6TClass,RecvIPv6PktInfo)     , StructLinger (..)+    , SocketTimeout (..)     , isSupportedSocketOption     , whenSupported     , getSocketOption
Network/Socket/ByteString/IO.hsc view
@@ -232,6 +232,11 @@ -- -- For TCP sockets, a zero length return value means the peer has -- closed its half side of the connection.+--+-- Currently, the 'recv' family is blocked on Windows because a proper+-- IO manager is not implemented. To use with 'System.Timeout.timeout'+-- on Windows, use 'Network.Socket.setSocketOption' with+-- 'Network.Socket.RecvTimeOut' as well. recv :: Socket        -- ^ Connected socket      -> Int            -- ^ Maximum number of bytes to receive      -> IO ByteString  -- ^ Data received
Network/Socket/Info.hsc view
@@ -413,11 +413,7 @@ -- SockAddr  instance Show SockAddr where-#if defined(DOMAIN_SOCKET_SUPPORT)   showsPrec _ (SockAddrUnix str) = showString str-#else-  showsPrec _ SockAddrUnix{} = error "showsPrec: not supported"-#endif   showsPrec _ (SockAddrInet port ha)    = showHostAddress ha    . showString ":"
Network/Socket/Options.hsc view
@@ -26,6 +26,7 @@   , getSockOpt   , setSockOpt   , StructLinger (..)+  , SocketTimeout (..)   ) where  import qualified Text.Read as P@@ -38,7 +39,9 @@ import Network.Socket.Types import Network.Socket.ReadShow ------------------------------------------------------------------------------+#include <sys/time.h>++---------------------------------------------------------------- -- Socket Properties  -- | Socket options for use with 'setSocketOption' and 'getSocketOption'.@@ -55,18 +58,75 @@ #endif   deriving (Eq) +----------------------------------------------------------------++socketOptionBijection :: Bijection SocketOption String+socketOptionBijection =+    [ (UnsupportedSocketOption, "UnsupportedSocketOption")+    , (Debug, "Debug")+    , (ReuseAddr, "ReuseAddr")+    , (SoDomain, "SoDomain")+    , (Type, "Type")+    , (SoProtocol, "SoProtocol")+    , (SoError, "SoError")+    , (DontRoute, "DontRoute")+    , (Broadcast, "Broadcast")+    , (SendBuffer, "SendBuffer")+    , (RecvBuffer, "RecvBuffer")+    , (KeepAlive, "KeepAlive")+    , (OOBInline, "OOBInline")+    , (Linger, "Linger")+    , (ReusePort, "ReusePort")+    , (RecvLowWater, "RecvLowWater")+    , (SendLowWater, "SendLowWater")+    , (RecvTimeOut, "RecvTimeOut")+    , (SendTimeOut, "SendTimeOut")+    , (UseLoopBack, "UseLoopBack")+    , (MaxSegment, "MaxSegment")+    , (NoDelay, "NoDelay")+    , (UserTimeout, "UserTimeout")+    , (Cork, "Cork")+    , (TimeToLive, "TimeToLive")+    , (RecvIPv4TTL, "RecvIPv4TTL")+    , (RecvIPv4TOS, "RecvIPv4TOS")+    , (RecvIPv4PktInfo, "RecvIPv4PktInfo")+    , (IPv6Only, "IPv6Only")+    , (RecvIPv6HopLimit, "RecvIPv6HopLimit")+    , (RecvIPv6TClass, "RecvIPv6TClass")+    , (RecvIPv6PktInfo, "RecvIPv6PktInfo")+    ]++instance Show SocketOption where+    showsPrec = bijectiveShow socketOptionBijection def+      where+        defname = "SockOpt"+        unwrap = \(CustomSockOpt nm) -> nm+        def = defShow defname unwrap showIntInt+++instance Read SocketOption where+    readPrec = bijectiveRead socketOptionBijection def+      where+        defname = "SockOpt"+        def = defRead defname CustomSockOpt readIntInt++----------------------------------------------------------------++pattern UnsupportedSocketOption :: SocketOption+pattern UnsupportedSocketOption = SockOpt (-1) (-1)+ -- | Does the 'SocketOption' exist on this system? isSupportedSocketOption :: SocketOption -> Bool isSupportedSocketOption opt = opt /= SockOpt (-1) (-1) --- | Get the 'SocketType' of an active socket.------   Since: 3.0.1.0-getSocketType :: Socket -> IO SocketType-getSocketType s = unpackSocketType <$> getSockOpt s Type+-- | Execute the given action only when the specified socket option is+--  supported. Any return value is ignored.+whenSupported :: SocketOption -> IO a -> IO ()+whenSupported s action+  | isSupportedSocketOption s = action >> return ()+  | otherwise                 = return () -pattern UnsupportedSocketOption :: SocketOption-pattern UnsupportedSocketOption = SockOpt (-1) (-1)+----------------------------------------------------------------  #ifdef SOL_SOCKET -- | SO_ACCEPTCONN, read-only@@ -192,14 +252,14 @@ #else pattern SendLowWater   = SockOpt (-1) (-1) #endif--- | SO_RCVTIMEO: this does not work at this moment.+-- | SO_RCVTIMEO: timeout in microseconds pattern RecvTimeOut :: SocketOption #ifdef SO_RCVTIMEO pattern RecvTimeOut    = SockOpt (#const SOL_SOCKET) (#const SO_RCVTIMEO) #else pattern RecvTimeOut    = SockOpt (-1) (-1) #endif--- | SO_SNDTIMEO: this does not work at this moment.+-- | SO_SNDTIMEO: timeout in microseconds pattern SendTimeOut :: SocketOption #ifdef SO_SNDTIMEO pattern SendTimeOut    = SockOpt (#const SOL_SOCKET) (#const SO_SNDTIMEO)@@ -317,41 +377,7 @@   where     CustomSockOpt (x, y) = SockOpt x y -#if __GLASGOW_HASKELL__ >= 806-{-# COMPLETE CustomSockOpt #-}-#endif-#ifdef SO_LINGER--- | Low level 'SO_LINBER' option value, which can be used with 'setSockOpt'.----data StructLinger = StructLinger {-    -- | Set the linger option on.-    sl_onoff  :: CInt,--    -- | Linger timeout.-    sl_linger :: CInt-  }-  deriving (Eq, Ord, Show)--instance Storable StructLinger where-    sizeOf    _ = (#const sizeof(struct linger))-    alignment _ = alignment (0 :: CInt)--    peek p = do-        onoff  <- (#peek struct linger, l_onoff) p-        linger <- (#peek struct linger, l_linger) p-        return $ StructLinger onoff linger--    poke p (StructLinger onoff linger) = do-        (#poke struct linger, l_onoff)  p onoff-        (#poke struct linger, l_linger) p linger-#endif---- | Execute the given action only when the specified socket option is---  supported. Any return value is ignored.-whenSupported :: SocketOption -> IO a -> IO ()-whenSupported s action-  | isSupportedSocketOption s = action >> return ()-  | otherwise                 = return ()+----------------------------------------------------------------  -- | Set a socket option that expects an 'Int' value. setSocketOption :: Socket@@ -363,6 +389,8 @@     let arg = if v == 0 then StructLinger 0 0 else StructLinger 1 (fromIntegral v)     setSockOpt s so arg #endif+setSocketOption s so@RecvTimeOut v = setSockOpt s so $ SocketTimeout $ fromIntegral v+setSocketOption s so@SendTimeOut v = setSockOpt s so $ SocketTimeout $ fromIntegral v setSocketOption s sa v = setSockOpt s sa (fromIntegral v :: CInt)  -- | Set a socket option.@@ -378,6 +406,8 @@           throwSocketErrorIfMinus1_ "Network.Socket.setSockOpt" $           c_setsockopt fd level opt ptr sz +----------------------------------------------------------------+ -- | Get a socket option that gives an 'Int' value. getSocketOption :: Socket                 -> SocketOption  -- Option Name@@ -387,6 +417,12 @@     StructLinger onoff linger <- getSockOpt s so     return $ fromIntegral $ if onoff == 0 then 0 else linger #endif+getSocketOption s so@RecvTimeOut = do+    SocketTimeout to <- getSockOpt s so+    return $ fromIntegral to+getSocketOption s so@SendTimeOut = do+    SocketTimeout to <- getSockOpt s so+    return $ fromIntegral to getSocketOption s so = do     n :: CInt <- getSockOpt s so     return $ fromIntegral n@@ -404,56 +440,75 @@                 c_getsockopt fd level opt ptr ptr_sz         peek ptr +---------------------------------------------------------------- -socketOptionBijection :: Bijection SocketOption String-socketOptionBijection =-    [ (UnsupportedSocketOption, "UnsupportedSocketOption")-    , (Debug, "Debug")-    , (ReuseAddr, "ReuseAddr")-    , (SoDomain, "SoDomain")-    , (Type, "Type")-    , (SoProtocol, "SoProtocol")-    , (SoError, "SoError")-    , (DontRoute, "DontRoute")-    , (Broadcast, "Broadcast")-    , (SendBuffer, "SendBuffer")-    , (RecvBuffer, "RecvBuffer")-    , (KeepAlive, "KeepAlive")-    , (OOBInline, "OOBInline")-    , (Linger, "Linger")-    , (ReusePort, "ReusePort")-    , (RecvLowWater, "RecvLowWater")-    , (SendLowWater, "SendLowWater")-    , (RecvTimeOut, "RecvTimeOut")-    , (SendTimeOut, "SendTimeOut")-    , (UseLoopBack, "UseLoopBack")-    , (MaxSegment, "MaxSegment")-    , (NoDelay, "NoDelay")-    , (UserTimeout, "UserTimeout")-    , (Cork, "Cork")-    , (TimeToLive, "TimeToLive")-    , (RecvIPv4TTL, "RecvIPv4TTL")-    , (RecvIPv4TOS, "RecvIPv4TOS")-    , (RecvIPv4PktInfo, "RecvIPv4PktInfo")-    , (IPv6Only, "IPv6Only")-    , (RecvIPv6HopLimit, "RecvIPv6HopLimit")-    , (RecvIPv6TClass, "RecvIPv6TClass")-    , (RecvIPv6PktInfo, "RecvIPv6PktInfo")-    ]+-- | Get the 'SocketType' of an active socket.+--+--   Since: 3.0.1.0+getSocketType :: Socket -> IO SocketType+getSocketType s = unpackSocketType <$> getSockOpt s Type -instance Show SocketOption where-    showsPrec = bijectiveShow socketOptionBijection def-      where-        defname = "SockOpt"-        unwrap = \(CustomSockOpt nm) -> nm-        def = defShow defname unwrap showIntInt+---------------------------------------------------------------- +#if __GLASGOW_HASKELL__ >= 806+{-# COMPLETE CustomSockOpt #-}+#endif+#ifdef SO_LINGER+-- | Low level 'SO_LINBER' option value, which can be used with 'setSockOpt'.+--+data StructLinger = StructLinger {+    -- | Set the linger option on.+    sl_onoff  :: CInt, -instance Read SocketOption where-    readPrec = bijectiveRead socketOptionBijection def-      where-        defname = "SockOpt"-        def = defRead defname CustomSockOpt readIntInt+    -- | Linger timeout.+    sl_linger :: CInt+  }+  deriving (Eq, Ord, Show)++instance Storable StructLinger where+    sizeOf    _ = (#const sizeof(struct linger))+    alignment _ = alignment (0 :: CInt)++    peek p = do+        onoff  <- (#peek struct linger, l_onoff) p+        linger <- (#peek struct linger, l_linger) p+        return $ StructLinger onoff linger++    poke p (StructLinger onoff linger) = do+        (#poke struct linger, l_onoff)  p onoff+        (#poke struct linger, l_linger) p linger+#endif++----------------------------------------------------------------++-- | Timeout in microseconds.+--   This will be converted into struct timeval on Unix and+--   DWORD (as milliseconds) on Windows.+newtype SocketTimeout = SocketTimeout Word32 deriving (Eq, Ord, Show)++#if defined(mingw32_HOST_OS)+instance Storable SocketTimeout where+    sizeOf (SocketTimeout to) = sizeOf to -- DWORD as milliseconds+    alignment _ = 0+    peek ptr    = do+        to <- peek (castPtr ptr)+        return $ SocketTimeout (to * 1000)+    poke ptr (SocketTimeout to) = poke (castPtr ptr) (to `div` 1000)+#else+instance Storable SocketTimeout where+    sizeOf _    = (#size struct timeval)+    alignment _ = (#const offsetof(struct {char x__; struct timeval (y__); }, y__))+    peek ptr    = do+            sec  <- (#peek struct timeval, tv_sec)  ptr+            usec <- (#peek struct timeval, tv_usec) ptr+            return $ SocketTimeout (sec * 1000000 + usec)+    poke ptr (SocketTimeout to) = do+            let (sec, usec) = to `divMod` 1000000+            (#poke struct timeval, tv_sec)  ptr sec+            (#poke struct timeval, tv_usec) ptr usec+#endif++----------------------------------------------------------------  foreign import CALLCONV unsafe "getsockopt"   c_getsockopt :: CInt -> CInt -> CInt -> Ptr a -> Ptr CInt -> IO CInt
Network/Socket/Types.hsc view
@@ -93,9 +93,7 @@  import qualified Text.Read as P -#if defined(DOMAIN_SOCKET_SUPPORT) import Foreign.Marshal.Array-#endif  import Network.Socket.Imports @@ -1075,11 +1073,7 @@ isSupportedSockAddr addr = case addr of   SockAddrInet{}  -> True   SockAddrInet6{} -> True-#if defined(DOMAIN_SOCKET_SUPPORT)   SockAddrUnix{}  -> True-#else-  SockAddrUnix{}  -> False-#endif  instance SocketAddress SockAddr where     sizeOfSocketAddress = sizeOfSockAddr@@ -1098,7 +1092,6 @@ -- 'SockAddr'.  This function differs from 'Foreign.Storable.sizeOf' -- in that the value of the argument /is/ used. sizeOfSockAddr :: SockAddr -> Int-#if defined(DOMAIN_SOCKET_SUPPORT) # ifdef linux_HOST_OS -- http://man7.org/linux/man-pages/man7/unix.7.html says: -- "an abstract socket address is distinguished (from a@@ -1118,9 +1111,6 @@ # else sizeOfSockAddr SockAddrUnix{}  = #const sizeof(struct sockaddr_un) # endif-#else-sizeOfSockAddr SockAddrUnix{}  = error "sizeOfSockAddr: not supported"-#endif sizeOfSockAddr SockAddrInet{}  = #const sizeof(struct sockaddr_in) sizeOfSockAddr SockAddrInet6{} = #const sizeof(struct sockaddr_in6) @@ -1135,10 +1125,8 @@ -- structure, and attempting to do so could overflow the allocated storage -- space.  This constant holds the maximum allowable path length. ---#if defined(DOMAIN_SOCKET_SUPPORT) unixPathMax :: Int unixPathMax = #const sizeof(((struct sockaddr_un *)NULL)->sun_path)-#endif  -- We can't write an instance of 'Storable' for 'SockAddr' because -- @sockaddr@ is a sum type of variable size but@@ -1149,7 +1137,6 @@  -- | Write the given 'SockAddr' to the given memory location. pokeSockAddr :: Ptr a -> SockAddr -> IO ()-#if defined(DOMAIN_SOCKET_SUPPORT) pokeSockAddr p sa@(SockAddrUnix path) = do     when (length path > unixPathMax) $ error       $ "pokeSockAddr: path is too long in SockAddrUnix " <> show path@@ -1162,9 +1149,6 @@     let pathC = map castCharToCChar path     -- the buffer is already filled with nulls.     pokeArray ((#ptr struct sockaddr_un, sun_path) p) pathC-#else-pokeSockAddr _ SockAddrUnix{} = error "pokeSockAddr: not supported"-#endif pokeSockAddr p (SockAddrInet port addr) = do     zeroMemory p (#const sizeof(struct sockaddr_in)) #if defined(HAVE_STRUCT_SOCKADDR_SA_LEN)@@ -1189,11 +1173,9 @@ peekSockAddr p = do   family <- (#peek struct sockaddr, sa_family) p   case family :: CSaFamily of-#if defined(DOMAIN_SOCKET_SUPPORT)     (#const AF_UNIX) -> do         str <- peekCAString ((#ptr struct sockaddr_un, sun_path) p)         return (SockAddrUnix str)-#endif     (#const AF_INET) -> do         addr <- (#peek struct sockaddr_in, sin_addr) p         port <- (#peek struct sockaddr_in, sin_port) p
Network/Socket/Unix.hsc view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE ScopedTypeVariables #-}  #include "HsNet.h" ##include "HsNetDef.h"@@ -13,16 +14,24 @@   , getPeerEid   ) where -import System.Posix.Types (Fd(..))-+import Foreign.Marshal.Alloc (allocaBytes) import Network.Socket.Buffer+import Network.Socket.Fcntl import Network.Socket.Imports+import Network.Socket.Types+import System.Posix.Types (Fd(..))+ #if defined(mingw32_HOST_OS)+import Network.Socket.Syscall import Network.Socket.Win32.Cmsg+import System.Directory+import System.IO+import System.IO.Temp #else+import Foreign.Marshal.Array (peekArray)+import Network.Socket.Internal import Network.Socket.Posix.Cmsg #endif-import Network.Socket.Types  #if defined(HAVE_GETPEEREID) import System.IO.Error (catchIOError)@@ -30,13 +39,7 @@ #ifdef HAVE_GETPEEREID import Foreign.Marshal.Alloc (alloca) #endif-#ifdef DOMAIN_SOCKET_SUPPORT-import Foreign.Marshal.Alloc (allocaBytes)-import Foreign.Marshal.Array (peekArray) -import Network.Socket.Fcntl-import Network.Socket.Internal-#endif #ifdef HAVE_STRUCT_UCRED_SO_PEERCRED import Network.Socket.Options #endif@@ -123,14 +126,12 @@ {-# Deprecated getPeerEid "Use getPeerCredential instead" #-}  -- | Whether or not UNIX-domain sockets are available.+--   'AF_UNIX' is supported on Windows since 3.1.3.0.+--   So, this variable is 'True` on all platforms. -- --   Since 2.7.0.0. isUnixDomainSocketAvailable :: Bool-#if defined(DOMAIN_SOCKET_SUPPORT) isUnixDomainSocketAvailable = True-#else-isUnixDomainSocketAvailable = False-#endif  data NullSockAddr = NullSockAddr @@ -140,26 +141,19 @@     pokeSocketAddress _ _ = return ()  -- | Send a file descriptor over a UNIX-domain socket.---   Use this function in the case where 'isUnixDomainSocketAvailable' is---  'True'.+--   This function does not work on Windows. sendFd :: Socket -> CInt -> IO ()-#if defined(DOMAIN_SOCKET_SUPPORT) sendFd s outfd = void $ allocaBytes dummyBufSize $ \buf -> do     let cmsg = encodeCmsg $ Fd outfd     sendBufMsg s NullSockAddr [(buf,dummyBufSize)] [cmsg] mempty   where     dummyBufSize = 1-#else-sendFd _ _ = error "Network.Socket.sendFd"-#endif  -- | Receive a file descriptor over a UNIX-domain socket. Note that the resulting --   file descriptor may have to be put into non-blocking mode in order to be --   used safely. See 'setNonBlockIfNeeded'.---   Use this function in the case where 'isUnixDomainSocketAvailable' is---  'True'.+--   This function does not work on Windows. recvFd :: Socket -> IO CInt-#if defined(DOMAIN_SOCKET_SUPPORT) recvFd s = allocaBytes dummyBufSize $ \buf -> do     (NullSockAddr, _, cmsgs, _) <- recvBufMsg s [(buf,dummyBufSize)] 32 mempty     case (lookupCmsg CmsgIdFd cmsgs >>= decodeCmsg) :: Maybe Fd of@@ -167,19 +161,29 @@       Just (Fd fd) -> return fd   where     dummyBufSize = 16-#else-recvFd _ = error "Network.Socket.recvFd"-#endif  -- | Build a pair of connected socket objects.---   For portability, use this function in the case---   where 'isUnixDomainSocketAvailable' is 'True'---   and specify 'AF_UNIX' to the first argument.+--   On Windows, this function emulates socketpair() using+--   'AF_UNIX' and a temporary file will remain. socketPair :: Family              -- Family Name (usually AF_UNIX)            -> SocketType          -- Socket Type (usually Stream)            -> ProtocolNumber      -- Protocol Number            -> IO (Socket, Socket) -- unnamed and connected.-#if defined(DOMAIN_SOCKET_SUPPORT)+#if defined(mingw32_HOST_OS)+socketPair _ _ _ = withSystemTempFile "temp-for-pair" $ \file hdl -> do+    hClose hdl+    removeFile file+    listenSock <- socket AF_UNIX Stream defaultProtocol+    bind listenSock $ SockAddrUnix file+    listen listenSock 10+    clientSock <- socket AF_UNIX Stream defaultProtocol+    connect clientSock $ SockAddrUnix file+    (serverSock, _ :: SockAddr) <- accept listenSock+    close listenSock+    withFdSocket clientSock setNonBlockIfNeeded+    withFdSocket serverSock setNonBlockIfNeeded+    return (clientSock, serverSock)+#else socketPair family stype protocol =     allocaBytes (2 * sizeOf (1 :: CInt)) $ \ fdArr -> do       let c_stype = packSocketType stype@@ -194,6 +198,4 @@  foreign import ccall unsafe "socketpair"   c_socketpair :: CInt -> CInt -> CInt -> Ptr CInt -> IO CInt-#else-socketPair _ _ _ = error "Network.Socket.socketPair" #endif
configure view
@@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles.-# Generated by GNU Autoconf 2.69 for Haskell network package 3.1.3.0.+# Generated by GNU Autoconf 2.69 for Haskell network package 3.1.4.0. # # Report bugs to <libraries@haskell.org>. #@@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='Haskell network package' PACKAGE_TARNAME='network'-PACKAGE_VERSION='3.1.3.0'-PACKAGE_STRING='Haskell network package 3.1.3.0'+PACKAGE_VERSION='3.1.4.0'+PACKAGE_STRING='Haskell network package 3.1.4.0' PACKAGE_BUGREPORT='libraries@haskell.org' PACKAGE_URL='' @@ -1234,7 +1234,7 @@   # Omit some internal or obsolete options to make the list less imposing.   # This message is too long to be a string in the A/UX 3.1 sh.   cat <<_ACEOF-\`configure' configures Haskell network package 3.1.3.0 to adapt to many kinds of systems.+\`configure' configures Haskell network package 3.1.4.0 to adapt to many kinds of systems.  Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1299,7 +1299,7 @@  if test -n "$ac_init_help"; then   case $ac_init_help in-     short | recursive ) echo "Configuration of Haskell network package 3.1.3.0:";;+     short | recursive ) echo "Configuration of Haskell network package 3.1.4.0:";;    esac   cat <<\_ACEOF @@ -1384,7 +1384,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then   cat <<\_ACEOF-Haskell network package configure 3.1.3.0+Haskell network package configure 3.1.4.0 generated by GNU Autoconf 2.69  Copyright (C) 2012 Free Software Foundation, Inc.@@ -1910,7 +1910,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Haskell network package $as_me 3.1.3.0, which was+It was created by Haskell network package $as_me 3.1.4.0, which was generated by GNU Autoconf 2.69.  Invocation command line was    $ $0 $@@@ -4419,7 +4419,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log="-This file was extended by Haskell network package $as_me 3.1.3.0, which was+This file was extended by Haskell network package $as_me 3.1.4.0, which was generated by GNU Autoconf 2.69.  Invocation command line was    CONFIG_FILES    = $CONFIG_FILES@@ -4472,7 +4472,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\-Haskell network package config.status 3.1.3.0+Haskell network package config.status 3.1.4.0 configured by $0, generated by GNU Autoconf 2.69,   with options \\"\$ac_cs_config\\" 
configure.ac view
@@ -1,5 +1,5 @@ AC_INIT([Haskell network package],-        [3.1.3.0],+        [3.1.4.0],         [libraries@haskell.org],         [network]) 
include/HsNetDef.h view
@@ -10,8 +10,6 @@ #undef PACKAGE_TARNAME #undef PACKAGE_VERSION -#define DOMAIN_SOCKET_SUPPORT 1- #if defined(HAVE_STRUCT_UCRED) && HAVE_DECL_SO_PEERCRED # define HAVE_STRUCT_UCRED_SO_PEERCRED 1 #else
network.cabal view
@@ -1,6 +1,6 @@ cabal-version:      1.18 name:               network-version:            3.1.3.0+version:            3.1.4.0 license:            BSD3 license-file:       LICENSE maintainer:         Kazu Yamamoto, Evan Borden@@ -124,6 +124,10 @@     include-dirs:     include     includes:         HsNet.h HsNetDef.h alignment.h win32defs.h     install-includes: HsNet.h HsNetDef.h alignment.h win32defs.h+    if os(windows)+        includes:         afunix_compat.h+        install-includes: afunix_compat.h+     ghc-options:      -Wall -fwarn-tabs     build-depends:         base >=4.9 && <5,@@ -167,6 +171,9 @@         if impl(ghc >=7.10)             cpp-options: -D_WIN32_WINNT=0x0600             cc-options:  -D_WIN32_WINNT=0x0600++        build-depends:+            temporary  test-suite spec     type:             exitcode-stdio-1.0