diff --git a/rethinkdb-client-driver.cabal b/rethinkdb-client-driver.cabal
--- a/rethinkdb-client-driver.cabal
+++ b/rethinkdb-client-driver.cabal
@@ -1,5 +1,5 @@
 name:                   rethinkdb-client-driver
-version:                0.0.6
+version:                0.0.7
 license:                MIT
 license-file:           LICENSE
 author:                 Tomas Carnecky
diff --git a/src/Database/RethinkDB.hs b/src/Database/RethinkDB.hs
--- a/src/Database/RethinkDB.hs
+++ b/src/Database/RethinkDB.hs
@@ -3,7 +3,7 @@
 
 module Database.RethinkDB
     ( Handle
-    , defaultPort, newHandle
+    , defaultPort, newHandle, close
     , run, nextChunk, collect, stop, wait
 
     , Error(..)
@@ -76,6 +76,11 @@
     ref <- newIORef 1
 
     return $ Handle sock ref db
+
+
+-- | Close the given handle. You MUST NOT use the handle after this.
+close :: Handle -> IO ()
+close handle = closeSocket (hSocket handle)
 
 
 -- | Start a new query and wait for its (first) result. If the result is an
diff --git a/src/Database/RethinkDB/Messages.hs b/src/Database/RethinkDB/Messages.hs
--- a/src/Database/RethinkDB/Messages.hs
+++ b/src/Database/RethinkDB/Messages.hs
@@ -19,7 +19,7 @@
 import           Data.Binary.Get as Get
 
 import           Network.Socket (Socket, AddrInfo(..), AddrInfoFlag(..), SocketType(..))
-import           Network.Socket (getAddrInfo, socket, connect, defaultHints)
+import           Network.Socket (getAddrInfo, socket, connect, close, defaultHints)
 
 import           Network.Socket.ByteString      (recv)
 import           Network.Socket.ByteString.Lazy (sendAll)
@@ -37,6 +37,9 @@
   where
     hints = defaultHints { addrSocketType = Stream, addrFlags = [ AI_NUMERICSERV ] }
 
+
+closeSocket :: Socket -> IO ()
+closeSocket = close
 
 
 sendMessage :: Socket -> BS.ByteString -> IO ()
