diff --git a/ChangeLog.md b/ChangeLog.md
--- 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
--- a/Data/Streaming/Network.hs
+++ b/Data/Streaming/Network.hs
@@ -94,7 +94,7 @@
 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.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 @@
 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/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -4,8 +4,7 @@
 Common lower-level functions needed by various streaming data libraries.
 Intended to be shared by libraries like conduit and pipes.
 
-[![Build Status](https://travis-ci.org/fpco/streaming-commons.svg)](https://travis-ci.org/fpco/streaming-commons)
-[![Build status](https://ci.appveyor.com/api/projects/status/gn0gn4po97su2iyk/branch/master?svg=true)](https://ci.appveyor.com/project/snoyberg/streaming-commons/branch/master)
+[![Build Status](https://dev.azure.com/fpco/streaming-commons/_apis/build/status/fpco.streaming-commons?branchName=master)](https://dev.azure.com/fpco/streaming-commons/_build/latest?definitionId=2&branchName=master)
 
 Dependencies
 ------------
diff --git a/streaming-commons.cabal b/streaming-commons.cabal
--- 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
@@ -45,7 +45,7 @@
                        Data.Text.Internal.Encoding.Utf16
                        Data.Text.Internal.Encoding.Utf32
 
-  build-depends:       base >= 4.7 && < 5
+  build-depends:       base >= 4.8 && < 5
                      , array
                      , async
                      , bytestring
diff --git a/test/Data/Streaming/NetworkSpec.hs b/test/Data/Streaming/NetworkSpec.hs
--- a/test/Data/Streaming/NetworkSpec.hs
+++ b/test/Data/Streaming/NetworkSpec.hs
@@ -14,6 +14,10 @@
 
 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
