diff --git a/Data/Streaming/Network.hs b/Data/Streaming/Network.hs
--- a/Data/Streaming/Network.hs
+++ b/Data/Streaming/Network.hs
@@ -98,6 +98,7 @@
 import Data.IORef (IORef, newIORef, atomicModifyIORef)
 import Data.Array.Unboxed ((!), UArray, bounds, listArray)
 import System.IO.Unsafe (unsafePerformIO)
+import System.Random (randomRIO)
 #if WINDOWS
 import Control.Concurrent.MVar (putMVar, takeMVar, newEmptyMVar)
 #endif
@@ -207,7 +208,8 @@
 unassignedPortsMax = length unassignedPortsList
 
 nextUnusedPort :: IORef Int
-nextUnusedPort = unsafePerformIO $ newIORef unassignedPortsMin
+nextUnusedPort = unsafePerformIO
+               $ randomRIO (unassignedPortsMin, unassignedPortsMax) >>= newIORef
 {-# NOINLINE nextUnusedPort #-}
 
 -- | Get a port from the IANA list of unassigned ports.
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.1.2.3
+version:             0.1.2.4
 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
@@ -42,6 +42,7 @@
                      , bytestring
                      , directory
                      , network
+                     , random
                      , text
                      , transformers
                      , zlib
