Ho i seguenti elementi per provare a connettermi a un server:
testAddress :: HostName -> Int -> IO (Maybe Handle)
testAddress host iPort = do
let port = PortNumber $ fromIntegral iPort
putStrLn $ "Testing - Host: " ++ host ++ ", Port: " ++ show iPort
result <- try $ connectTo host port
case result of
Left (SomeException e) -> return Nothing
Right h -> do
putStrLn $ "Connected to " ++ host
return $ Just h
Ho fatto l'eccezione per catturare "SomeException", ma so che non è il modo corretto per farlo; poiché catturerà tutto e non potrai gestire singoli casi. Non riesco però a trovare i nomi di specifiche eccezioni di rete. Non sembra esserci alcuna documentazione per il pacchetto di rete, e ogni esempio che posso trovare su google utilizza solo "SomeException". Se provo a connettermi a un host e una porta casuali e non provo a rilevare nulla, ottengo l'errore: " * Eccezione: connect: failed (Timeout della connessione (WSAETIMEDOUT))" Ma non sembra darmi il nome esatto dell'eccezione da provare e catturare. Ho pensato che potesse essere "WSAETIMEOUT", ma quando ho provato a capirlo, ho ricevuto un errore di compilazione dicendo che non riusciva a trovare il costruttore per "WSAETIMEOUT". Cosa dovrei fare. Non voglio prendere tutto e trattarlo allo stesso modo, perché poi non so che cosa sta succedendo.
Grazie