From ce5cfe2aa869d949fff59899eac4df131e79f21b Mon Sep 17 00:00:00 2001 From: Romain GERARD Date: Sat, 4 Jan 2020 22:18:19 +0100 Subject: [PATCH] #54 Use system value for defaultReadBufferSize --- ChangeLog.md | 4 ++++ Data/Streaming/Network.hs | 8 +++++--- streaming-commons.cabal | 2 +- test/Data/Streaming/NetworkSpec.hs | 4 ++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 3f21b7e..280c75e 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,5 +1,9 @@ # ChangeLog for streaming-commons +## 0.2.1.2 + +* Update `defaultReadBufferSize` to use system default instead of hardcoded value [#54](https://github.com/fpco/streaming-commons/issues/54) + ## 0.2.1.1 * Fix a failing test case (invalid `ByteString` copying), does not affect library itself diff --git a/Data/Streaming/Network.hs b/Data/Streaming/Network.hs index 535c5cc..c957730 100644 --- a/Data/Streaming/Network.hs +++ b/Data/Streaming/Network.hs @@ -94,7 +94,7 @@ module Data.Streaming.Network import qualified Network.Socket as NS import Data.Streaming.Network.Internal import Control.Concurrent (threadDelay) -import Control.Exception (IOException, try, SomeException, throwIO, bracketOnError) +import Control.Exception (IOException, try, SomeException, throwIO, bracketOnError, bracket) import Network.Socket (Socket, AddrInfo, SocketType) import Network.Socket.ByteString (recv, sendAll) import System.IO.Error (isDoesNotExistError) @@ -108,7 +108,7 @@ import Control.Concurrent (forkIO) import Control.Monad (forever) import Data.IORef (IORef, newIORef, atomicModifyIORef) import Data.Array.Unboxed ((!), UArray, listArray) -import System.IO.Unsafe (unsafePerformIO) +import System.IO.Unsafe (unsafePerformIO, unsafeDupablePerformIO) import System.Random (randomRIO) import System.IO.Error (isFullErrorType, ioeGetErrorType) #if WINDOWS @@ -263,8 +263,10 @@ bindPortUDP = bindPortGen NS.Datagram bindRandomPortUDP :: HostPreference -> IO (Int, Socket) bindRandomPortUDP = bindRandomPortGen NS.Datagram +{-# NOINLINE defaultReadBufferSize #-} defaultReadBufferSize :: Int -defaultReadBufferSize = 32768 +defaultReadBufferSize = unsafeDupablePerformIO $ + bracket (NS.socket NS.AF_INET NS.Stream 0) NS.close (\sock -> NS.getSocketOption sock NS.RecvBuffer) #if !WINDOWS -- | Attempt to connect to the given Unix domain socket path. diff --git a/streaming-commons.cabal b/streaming-commons.cabal index fb380d1..ac82c42 100644 --- a/streaming-commons.cabal +++ b/streaming-commons.cabal @@ -1,5 +1,5 @@ name: streaming-commons -version: 0.2.1.1 +version: 0.2.1.2 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 --git a/test/Data/Streaming/NetworkSpec.hs b/test/Data/Streaming/NetworkSpec.hs index d86919e..79fdd98 100644 --- a/test/Data/Streaming/NetworkSpec.hs +++ b/test/Data/Streaming/NetworkSpec.hs @@ -14,6 +14,10 @@ import Test.Hspec.QuickCheck spec :: Spec spec = do + describe "getDefaultReadBufferSize" $ do + it "sanity" $ do + getReadBufferSize (clientSettingsTCP 8080 "localhost") >= 4096 `shouldBe` True + describe "getUnassignedPort" $ do it "sanity" $ replicateM_ 100000 $ do port <- getUnassignedPort