diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## Version 3.0.0.1
+
+* Fixed a bug in `connect` where exceptions were not thrown
+  [#368](https://github.com/haskell/network/pull/368)
+
 ## Version 3.0.0.0
 
 * Breaking change: the Network and Network.BSD are removed.
@@ -8,7 +13,7 @@
 new fdSocket :: Socket -> IO CInt
 
 old mkSocket :: CInt -> Family -> SocketType -> ProtocolNumber -> SocketStatus -> IO Socket
-new mkSocket :: CInt Socket
+new mkSocket :: CInt -> IO Socket
 ```
 * Breaking change: the deprecated APIs are removed: send, sendTo, recv, recvFrom, recvLen, htonl, ntohl, inet_addr, int_ntoa, bindSocket, sClose, SocketStatus, isConnected, isBound, isListening, isReadable, isWritable, sIsConnected, sIsBound, sIsListening, sIsReadable, sIsWritable, aNY_PORT, iNADDR_ANY, iN6ADDR_ANY, sOMAXCONN, sOL_SOCKET, sCM_RIGHTS, packSocketType, getPeerCred.
 * Breaking chage: SockAddrCan is removed from SockAddr.
diff --git a/Network/Socket/Syscall.hs b/Network/Socket/Syscall.hs
--- a/Network/Socket/Syscall.hs
+++ b/Network/Socket/Syscall.hs
@@ -160,7 +160,7 @@
        fd <- fromIntegral <$> fdSocket s
        threadWaitWrite fd
        err <- getSocketOption s SoError
-       when (err == -1) $ throwSocketErrorCode errLoc (fromIntegral err)
+       when (err /= 0) $ throwSocketErrorCode errLoc (fromIntegral err)
 #endif
 
 -----------------------------------------------------------------------------
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -53,14 +53,20 @@
 
 See https://github.com/haskell/network/issues/296
 
-- Making `Network` deprecated
-- Making `Network.BSD` deprecated
-- Making `MkSocket` deprecated
-- Making many APIs deprecated
+- [x] Making `Network` deprecated
+- [x] Making `Network.BSD` deprecated
+- [x] Making `MkSocket` deprecated
+- [x] Making many APIs deprecated
 
+### 2.8
+
+- [x] Stop exporting the `PortNum` Constructor in `PortNumber`
+
 ### 3.0
 
-- Removing `Network`
-- Removing `Network.BSD`
-- Removing `SockAddrCan`
-- Changing the internal structure of `Socket`.
+- [x] Removing `Network`
+- [x] Removing `Network.BSD`
+- [x] Removing `SockAddrCan`
+- [x] Changing the internal structure of `Socket`.
+- [x] Make address extensible.
+- [x] Remove EOF errors
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 AC_INIT([Haskell network package],
-        [3.0.0.0],
+        [3.0.0.1],
         [libraries@haskell.org],
         [network])
 
diff --git a/network.cabal b/network.cabal
--- a/network.cabal
+++ b/network.cabal
@@ -1,6 +1,6 @@
 cabal-version:  1.18
 name:           network
-version:        3.0.0.0
+version:        3.0.0.1
 license:        BSD3
 license-file:   LICENSE
 maintainer:     Kazu Yamamoto, Evan Borden
diff --git a/tests/SimpleSpec.hs b/tests/SimpleSpec.hs
--- a/tests/SimpleSpec.hs
+++ b/tests/SimpleSpec.hs
@@ -5,7 +5,7 @@
 module SimpleSpec (main, spec) where
 
 import Control.Concurrent (ThreadId, forkIO, myThreadId)
-import Control.Concurrent.MVar (newEmptyMVar, putMVar, takeMVar, readMVar)
+import Control.Concurrent.MVar (MVar, newEmptyMVar, putMVar, takeMVar, readMVar)
 import qualified Control.Exception as E
 import Control.Monad
 import Data.ByteString (ByteString)
@@ -111,6 +111,18 @@
 
                 client sock = send sock testMsg
             tcpTest client server
+    describe "connect" $ do
+        let
+          hints = defaultHints { addrSocketType = Stream }
+          connect' serverPort = do
+              addr:_ <- getAddrInfo (Just hints) (Just serverAddr) (Just $ show serverPort)
+              sock <- socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr)
+              connect sock (addrAddress addr)
+              return sock
+        it "fails to connect and throws an IOException" $ do
+            connect' (8080 :: Int) `shouldThrow` anyIOException
+        it "successfully connects to a socket with no exception" $ do
+            tcpTestUsingClient return return $ readMVar >=> connect'
 
     describe "UserTimeout" $ do
         it "can be set" $ do
@@ -244,8 +256,7 @@
 -- closed after the actions have run.
 tcpTest :: (Socket -> IO a) -> (Socket -> IO b) -> IO ()
 tcpTest clientAct serverAct = do
-    portVar <- newEmptyMVar
-    test (clientSetup portVar) clientAct (serverSetup portVar) server
+    tcpTestUsingClient serverAct clientAct clientSetup
   where
     clientSetup portVar = do
         let hints = defaultHints { addrSocketType = Stream }
@@ -260,6 +271,12 @@
         connect sock $ addrAddress addr
         return sock
 
+tcpTestUsingClient
+    :: (Socket -> IO a) -> (Socket -> IO b) -> (MVar PortNumber -> IO Socket) -> IO ()
+tcpTestUsingClient serverAct clientAct clientSetup = do
+    portVar <- newEmptyMVar
+    test (clientSetup portVar) clientAct (serverSetup portVar) server
+  where
     serverSetup portVar = do
         let hints = defaultHints {
                 addrFlags = [AI_PASSIVE]
