diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,8 @@
+## 2.0.3
+
+* Using shutdown instead of close in the example. This is important to
+  send GOAWAY properly.
+
 ## 2.0.2
 
 * Bug fix of flush limit.
diff --git a/Network/HTTP2/Server.hs b/Network/HTTP2/Server.hs
--- a/Network/HTTP2/Server.hs
+++ b/Network/HTTP2/Server.hs
@@ -9,6 +9,7 @@
 -- > module Main (main) where
 -- >
 -- > import Control.Concurrent (forkFinally)
+-- > import Control.Exception (SomeException(..))
 -- > import qualified Control.Exception as E
 -- > import Control.Monad (forever, void)
 -- > import Data.ByteString.Builder (byteString)
@@ -48,7 +49,10 @@
 -- >         return sock
 -- >     loop sock = forever $ do
 -- >         (conn, peer) <- accept sock
--- >         void $ forkFinally (server conn peer) (\_ -> close conn)
+-- >         void $ forkFinally (server conn peer) (clear conn)
+-- >     clear conn _ = shutdown conn ShutdownSend `E.catch` ignore
+-- >       where
+-- >         ignore (SomeException _) = return ()
 
 module Network.HTTP2.Server (
   -- * Runner
diff --git a/Network/HTTP2/Server/Sender.hs b/Network/HTTP2/Server/Sender.hs
--- a/Network/HTTP2/Server/Sender.hs
+++ b/Network/HTTP2/Server/Sender.hs
@@ -68,7 +68,7 @@
             emp <- isEmptySTM outputQ
             if emp then
                 if off /= 0 then return Flush else retry
-               else
+              else
                 O <$> dequeueSTM outputQ
           else
             C <$> readTQueue controlQ
diff --git a/http2.cabal b/http2.cabal
--- a/http2.cabal
+++ b/http2.cabal
@@ -1,5 +1,5 @@
 Name:                   http2
-Version:                2.0.2
+Version:                2.0.3
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
