on master help sign in
Hide some tls error messages #296
commitdc040ad4147ed5161c0c1321e9c3028741e0de0a authorMichael Snoyman <michael@snoyman.com> dateMon 13 Oct 2014, 18:30 (12 years ago) parent4512f17
1 file changed+11−5
warp-tls/Network/Wai/Handler/WarpTLS.hs+11−5
warp-tls/Network/Wai/Handler/WarpTLS.hs+11−5
@@ -29,7 +29,7 @@ import Network.Wai.Handler.Warp
2929import Network.Wai (Application)
3030import Network.Socket (Socket, sClose, withSocketsDo)
3131import qualified Data.ByteString.Lazy as L
32−import Control.Exception (bracket, finally, handle)
32+import Control.Exception (bracket, finally, handle, fromException, try, IOException)
3333import qualified Network.TLS.Extra as TLSExtra
3434import qualified Data.ByteString as B
3535import Data.Streaming.Network (bindPortTCP, acceptSafe, safeRecv)
@@ -41,9 +41,10 @@ import Data.Default.Class (def)
4141import qualified Crypto.Random.AESCtr
4242import Network.Wai.Handler.Warp.Buffer (allocateBuffer, bufferSize, freeBuffer)
4343import Network.Socket.ByteString (sendAll)
44−import Control.Monad (unless)
44+import Control.Monad (unless, void)
4545import Data.ByteString.Lazy.Internal (defaultChunkSize)
4646import qualified System.IO as IO
47+import System.IO.Error (isEOFError)
4748
4849data TLSSettings = TLSSettings
4950 { certFile :: FilePath
@@ -172,11 +173,13 @@ runTLSSocket TLSSettings {..} set sock app = do
172173 , connClose =
173174 freeBuffer readBuf `finally`
174175 freeBuffer writeBuf `finally`
175− TLS.bye ctx `finally`
176+ void (tryIO $ TLS.bye ctx) `finally`
176177 TLS.contextClose ctx
177178 , connRecv =
178− let onEOF TLS.Error_EOF = return B.empty
179− onEOF e = throwIO e
179+ let onEOF e
180+ | Just TLS.Error_EOF <- fromException e = return B.empty
181+ | Just ioe <- fromException e, isEOFError ioe = return B.empty
182+ | otherwise = throwIO e
180183 go = do
181184 x <- TLS.recvData ctx
182185 if B.null x
@@ -223,3 +226,6 @@ ciphers =
223226 , TLSExtra.cipher_RC4_128_MD5
224227 , TLSExtra.cipher_RC4_128_SHA1
225228 ]
229+
230+tryIO :: IO a -> IO (Either IOException a)
231+tryIO = try