Hello community,

here is the log from the commit of package ghc-streaming-commons for 
openSUSE:Factory checked in at 2016-05-16 12:04:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-streaming-commons (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-streaming-commons.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-streaming-commons"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/ghc-streaming-commons/ghc-streaming-commons.changes  
    2016-04-30 23:30:37.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.ghc-streaming-commons.new/ghc-streaming-commons.changes
 2016-05-16 12:04:09.000000000 +0200
@@ -1,0 +2,6 @@
+Thu May 12 13:44:14 UTC 2016 - mimi...@gmail.com
+
+- update to 0.1.15.5
+* Make getSocket{Family}TCP try all addr candidates
+
+-------------------------------------------------------------------

Old:
----
  streaming-commons-0.1.15.4.tar.gz

New:
----
  streaming-commons-0.1.15.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghc-streaming-commons.spec ++++++
--- /var/tmp/diff_new_pack.qRLnPM/_old  2016-05-16 12:04:10.000000000 +0200
+++ /var/tmp/diff_new_pack.qRLnPM/_new  2016-05-16 12:04:10.000000000 +0200
@@ -21,7 +21,7 @@
 %bcond_with tests
 
 Name:           ghc-streaming-commons
-Version:        0.1.15.4
+Version:        0.1.15.5
 Release:        0
 Summary:        Common lower-level functions needed by various streaming data 
libraries
 License:        MIT

++++++ streaming-commons-0.1.15.4.tar.gz -> streaming-commons-0.1.15.5.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/streaming-commons-0.1.15.4/ChangeLog.md 
new/streaming-commons-0.1.15.5/ChangeLog.md
--- old/streaming-commons-0.1.15.4/ChangeLog.md 2016-04-21 19:23:04.000000000 
+0200
+++ new/streaming-commons-0.1.15.5/ChangeLog.md 2016-05-11 06:44:05.000000000 
+0200
@@ -1,3 +1,7 @@
+## 0.1.15.5
+
+* Make getSocket{Family}TCP try all addr candidates 
[#32](https://github.com/fpco/streaming-commons/pull/32)
+
 ## 0.1.15.3
 
 * Fix benchmarks
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/streaming-commons-0.1.15.4/Data/Streaming/Network.hs 
new/streaming-commons-0.1.15.5/Data/Streaming/Network.hs
--- old/streaming-commons-0.1.15.4/Data/Streaming/Network.hs    2015-11-24 
11:17:22.000000000 +0100
+++ new/streaming-commons-0.1.15.5/Data/Streaming/Network.hs    2016-05-11 
06:44:05.000000000 +0200
@@ -114,17 +114,22 @@
 import Control.Concurrent.MVar (putMVar, takeMVar, newEmptyMVar)
 #endif
 
+getPossibleAddrs :: SocketType -> String -> Int -> NS.Family -> IO [AddrInfo]
+getPossibleAddrs sockettype host' port' af =
+    NS.getAddrInfo (Just hints) (Just host') (Just $ show port')
+  where
+    hints = NS.defaultHints {
+                NS.addrFlags = [NS.AI_ADDRCONFIG]
+              , NS.addrSocketType = sockettype
+              , NS.addrFamily = af
+              }
+
 -- | Attempt to connect to the given host/port/address family using given 
@SocketType@.
 --
 -- Since 0.1.3
 getSocketFamilyGen :: SocketType -> String -> Int -> NS.Family -> IO (Socket, 
AddrInfo)
 getSocketFamilyGen sockettype host' port' af = do
-    let hints = NS.defaultHints {
-                          NS.addrFlags = [NS.AI_ADDRCONFIG]
-                        , NS.addrSocketType = sockettype
-                        , NS.addrFamily = af
-                        }
-    (addr:_) <- NS.getAddrInfo (Just hints) (Just host') (Just $ show port')
+    (addr:_) <- getPossibleAddrs sockettype host' port' af
     sock <- NS.socket (NS.addrFamily addr) (NS.addrSocketType addr)
                       (NS.addrProtocol addr)
     return (sock, addr)
@@ -408,15 +413,22 @@
 -- Since 0.1.3
 getSocketFamilyTCP :: ByteString -> Int -> NS.Family -> IO (NS.Socket, 
NS.SockAddr)
 getSocketFamilyTCP host' port' addrFamily = do
-    (sock, addr) <- getSocketFamilyGen NS.Stream (S8.unpack host') port' 
addrFamily
-    NS.setSocketOption sock NS.NoDelay 1
-    ee <- try' $ NS.connect sock (NS.addrAddress addr)
-    case ee of
-        Left e -> NS.sClose sock >> throwIO e
-        Right () -> return (sock, NS.addrAddress addr)
+    addrsInfo <- getPossibleAddrs NS.Stream (S8.unpack host') port' addrFamily
+    firstSuccess addrsInfo
   where
-    try' :: IO a -> IO (Either SomeException a)
-    try' = try
+    firstSuccess [ai]     = connect ai
+    firstSuccess (ai:ais) = connect ai `E.catch` \(_ :: IOException) -> 
firstSuccess ais
+    firstSuccess _        = error "getSocketFamilyTCP: can't happen"
+
+    createSocket addrInfo = do
+        sock <- NS.socket (NS.addrFamily addrInfo) (NS.addrSocketType addrInfo)
+                          (NS.addrProtocol addrInfo)
+        NS.setSocketOption sock NS.NoDelay 1
+        return sock
+
+    connect addrInfo = E.bracketOnError (createSocket addrInfo) NS.sClose $ 
\sock -> do
+        NS.connect sock (NS.addrAddress addrInfo)
+        return (sock, NS.addrAddress addrInfo)
 
 -- | Attempt to connect to the given host/port.
 getSocketTCP :: ByteString -> Int -> IO (NS.Socket, NS.SockAddr)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/streaming-commons-0.1.15.4/streaming-commons.cabal 
new/streaming-commons-0.1.15.5/streaming-commons.cabal
--- old/streaming-commons-0.1.15.4/streaming-commons.cabal      2016-04-24 
15:29:18.000000000 +0200
+++ new/streaming-commons-0.1.15.5/streaming-commons.cabal      2016-05-11 
06:44:05.000000000 +0200
@@ -1,5 +1,5 @@
 name:                streaming-commons
-version:             0.1.15.4
+version:             0.1.15.5
 synopsis:            Common lower-level functions needed by various streaming 
data libraries
 description:         Provides low-dependency functionality commonly needed by 
various streaming data libraries, such as conduit and pipes.
 homepage:            https://github.com/fpco/streaming-commons
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/streaming-commons-0.1.15.4/test/Data/Streaming/NetworkSpec.hs 
new/streaming-commons-0.1.15.5/test/Data/Streaming/NetworkSpec.hs
--- old/streaming-commons-0.1.15.4/test/Data/Streaming/NetworkSpec.hs   
2015-11-24 11:15:28.000000000 +0100
+++ new/streaming-commons-0.1.15.5/test/Data/Streaming/NetworkSpec.hs   
2016-05-11 06:44:05.000000000 +0200
@@ -31,4 +31,4 @@
                         | null content = "hello"
                         | otherwise = S8.pack $ take 1000 content
                 withAsync (runTCPServer (serverSettingsTCPSocket socket) 
server) $ \_ -> do
-                    runTCPClient (clientSettingsTCP port "127.0.0.1") client
+                    runTCPClient (clientSettingsTCP port "localhost") client


Reply via email to