diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 0.1.8
+
+Generalise types of run\*Server which never cleanly return [#13](https://github.com/fpco/streaming-commons/pull/13)
+
 ## 0.1.7.1
 
 Fix `streamingProcess` so that it doesn't close `Handle`s passed in with
diff --git a/Data/Streaming/Network.hs b/Data/Streaming/Network.hs
--- a/Data/Streaming/Network.hs
+++ b/Data/Streaming/Network.hs
@@ -522,7 +522,7 @@
 
 type ConnectionHandle = Socket -> NS.SockAddr -> Maybe NS.SockAddr -> IO ()
 
-runTCPServerWithHandle :: ServerSettings -> ConnectionHandle -> IO ()
+runTCPServerWithHandle :: ServerSettings -> ConnectionHandle -> IO a
 runTCPServerWithHandle (ServerSettings port host msocket afterBind needLocalAddr) handle =
     case msocket of
         Nothing -> E.bracket (bindPortTCP port host) NS.sClose inner
@@ -546,7 +546,7 @@
 -- | Run an @Application@ with the given settings. This function will create a
 -- new listening socket, accept connections on it, and spawn a new thread for
 -- each connection.
-runTCPServer :: ServerSettings -> (AppData -> IO ()) -> IO ()
+runTCPServer :: ServerSettings -> (AppData -> IO ()) -> IO a
 runTCPServer settings app = runTCPServerWithHandle settings app'
   where app' socket addr mlocal =
           let ad = AppData
@@ -607,7 +607,7 @@
 -- | Run an @Application@ with the given settings. This function will create a
 -- new listening socket, accept connections on it, and spawn a new thread for
 -- each connection.
-runUnixServer :: ServerSettingsUnix -> (AppDataUnix -> IO ()) -> IO ()
+runUnixServer :: ServerSettingsUnix -> (AppDataUnix -> IO ()) -> IO a
 runUnixServer (ServerSettingsUnix path afterBind) app = E.bracket
     (bindPath path)
     NS.sClose
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.7.3
+version:             0.1.8
 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
