diff --git a/Changelog b/Changelog
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,14 @@
+2.0.13
+	- Testing with AppVeyor.
+	- Fixing sendAll on Windows [#72](https://github.com/kazu-yamamoto/dns/pull/72)
+	- Implementing RetryLimitExceeded [#73](https://github.com/kazu-yamamoto/dns/pull/73)
+
+2.0.12
+	- Fixing Windows build again
+2.0.11
+	- Fixing the StateBinary.get32 parser [#57](https://github.com/kazu-yamamoto/dns/pull/57)
+	- Removing bytestring-builder dependency [#61](https://github.com/kazu-yamamoto/dns/pull/61)
+	- Fixing Windows build [#62](https://github.com/kazu-yamamoto/dns/pull/62)
 2.0.10
 	- Cleaning up the code. [#47](https://github.com/kazu-yamamoto/dns/pull/47)
 2.0.9
diff --git a/Network/DNS/Internal.hs b/Network/DNS/Internal.hs
--- a/Network/DNS/Internal.hs
+++ b/Network/DNS/Internal.hs
@@ -107,6 +107,8 @@
     -- | The sequence number of the answer doesn't match our query. This
     --   could indicate foul play.
     SequenceNumberMismatch
+    -- | The number of retries for the request was exceeded.
+  | RetryLimitExceeded
     -- | The request simply timed out.
   | TimeoutExpired
     -- | The answer has the correct sequence number, but returned an
diff --git a/Network/DNS/Lookup.hs b/Network/DNS/Lookup.hs
--- a/Network/DNS/Lookup.hs
+++ b/Network/DNS/Lookup.hs
@@ -39,14 +39,14 @@
 --
 --   The only error that we can easily cause is a timeout. We do this
 --   by creating and utilizing a 'ResolvConf' which has a timeout of
---   one millisecond:
+--   one millisecond and a very limited number of retries:
 --
 --   >>> let hostname = Data.ByteString.Char8.pack "www.example.com"
---   >>> let badrc = defaultResolvConf { resolvTimeout = 1 }
+--   >>> let badrc = defaultResolvConf { resolvTimeout = 1, resolvRetry = 1 }
 --   >>>
 --   >>> rs <- makeResolvSeed badrc
 --   >>> withResolver rs $ \resolver -> lookupA resolver hostname
---   Left TimeoutExpired
+--   Left RetryLimitExceeded
 --
 --   As is the convention, successful results will always be wrapped
 --   in a 'Right', while errors will be wrapped in a 'Left'.
@@ -182,7 +182,7 @@
 --   >>> rs <- makeResolvSeed defaultResolvConf
 --   >>> ips <- withResolver rs $ \resolver -> lookupAviaMX resolver hostname
 --   >>> fmap sort ips
---   Right [133.138.10.34,203.178.136.49]
+--   Right [133.138.10.39,203.178.136.30]
 --
 --   Since there is more than one result, it is necessary to sort the
 --   list in order to check for equality.
diff --git a/Network/DNS/Resolver.hs b/Network/DNS/Resolver.hs
--- a/Network/DNS/Resolver.hs
+++ b/Network/DNS/Resolver.hs
@@ -19,6 +19,16 @@
   , fromDNSFormat
   ) where
 
+#if !defined(mingw32_HOST_OS)
+#define POSIX
+#else
+#define WIN
+#endif
+
+#if __GLASGOW_HASKELL__ < 709
+#define GHC708
+#endif
+
 import Control.Exception (bracket)
 import Data.Char (isSpace)
 import Data.List (isPrefixOf)
@@ -36,12 +46,11 @@
 import Prelude hiding (lookup)
 import System.Random (getStdRandom, randomR)
 import System.Timeout (timeout)
-
-#if __GLASGOW_HASKELL__ < 709
+#ifdef GHC708
 import Control.Applicative ((<$>), (<*>), pure)
 #endif
 
-#if mingw32_HOST_OS == 1
+#if defined(WIN) && defined(GHC708)
 import Network.Socket (send)
 import qualified Data.ByteString.Lazy.Char8 as LB
 import Control.Monad (when)
@@ -360,7 +369,7 @@
     loop query checkSeqno cnt mismatch
       | cnt == retry = do
           let ret | mismatch  = SequenceNumberMismatch
-                  | otherwise = TimeoutExpired
+                  | otherwise = RetryLimitExceeded
           return $ Left ret
       | otherwise    = do
           sendAll sock query
@@ -439,9 +448,9 @@
         Nothing  -> return $ Left TimeoutExpired
         Just res -> return $ Right res
 
-#if mingw32_HOST_OS == 1
--- Windows does not support sendAll in Network.ByteString.Lazy.
--- This implements sendAll with Haskell Strings.
+#if defined(WIN) && defined(GHC708)
+-- Windows does not support sendAll in Network.ByteString for older GHCs.
+sendAll :: Socket -> BS.ByteString -> IO ()
 sendAll sock bs = do
     sent <- send sock (LB.unpack bs)
     when (sent < fromIntegral (LB.length bs)) $ sendAll sock (LB.drop (fromIntegral sent) bs)
diff --git a/dns.cabal b/dns.cabal
--- a/dns.cabal
+++ b/dns.cabal
@@ -1,5 +1,5 @@
 Name:                   dns
-Version:                2.0.12
+Version:                2.0.13
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
