[Haskell-cafe] HTTP package: connection closing bug?

Arjun Guha arjun at cs.brown.edu
Thu Aug 21 18:23:59 EDT 2008


Hi,

I'm using HTTP-3001.0.4 with GHC 6.8.3 under Mac OS X 10.5 and Debian  
Lenny.  If I open and close many connections, I eventually get the  
error.  Anyone else seen this before?

*** Exception: socket: resource exhausted (Too many open files)

Apparently, the socket is not closing.  in TCP.hs:168, the call to  
shutdown is raising a "socket already closed" exception.  So, the  
program never reaches the sClose on line 171.

A simple fix is:

wanderlust:Network arjun$ diff TCP.hs.original TCP.hs
172c172
<                    }
---
 >                    } `Exception.catch` (\_ -> sClose sk)

The code that demonstrates this problem on Mac OS X is:

 > module Main where
 >
 > import Network.HTTP
 > import Network.URI (parseURI)
 > import Data.Maybe (fromJust)
 > import Control.Monad
 >
 > googleM n =  do
 >   s <- simpleHTTP $ Request (fromJust $ parseURI "http://www.google.com 
")
 >                             GET [] ""
 >   when (n `mod` 100 == 0) $ putStrLn (show n)
 >   return ()
 >
 > main = mapM_ googleM [1..5000]

On Debian Lenny, the code works fine with google.com.  However, when I  
try to connect to my local CouchDB server, it throws an exception  
after roughly 1000 connections.

Thanks.

Arjun


More information about the Haskell-Cafe mailing list