diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php
index e0483455960df296fab994f06fe9caad1030ba57..ce681cb42c8ff5be2acbc4ebd42fcdddf8c19925 100644
--- a/ecrire/inc/distant.php
+++ b/ecrire/inc/distant.php
@@ -1031,17 +1031,21 @@ function init_http($method, $url, $refuse_gz = false, $referer = '', $datas = ""
 	if (@$t['query']) $path .= "?" . $t['query'];
 
 	$f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date);
-	if (!$f){
-		// fallback : fopen
-		if (!need_proxy($host)
+	if (!$f OR !is_resource($f)){
+		// fallback : fopen si on a pas fait timeout dans lance_requete
+		// ce qui correspond a $f===110
+		if ($f!==110
+			AND !need_proxy($host)
 		  AND !_request('tester_proxy')
 		  AND (!isset($GLOBALS['inc_distant_allow_fopen']) OR $GLOBALS['inc_distant_allow_fopen'])){
 			$f = @fopen($url, "rb");
 			spip_log("connexion vers $url par simple fopen");
 			$fopen = true;
-		} else
+		}
+		else {
+			// echec total
 			$f = false;
-		// echec total
+		}
 	}
 
 	return array($f, $fopen);
@@ -1074,7 +1078,7 @@ function init_http($method, $url, $refuse_gz = false, $referer = '', $datas = ""
  * @param int|string $date
  *   timestamp pour entente If-Modified-Since
  * @return bool|resource
- *   false si echec
+ *   false|int si echec
  *   resource socket vers l'url demandee
  */
 function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz = false, $referer = '', $datas = "", $vers = "HTTP/1.0", $date = ''){
@@ -1100,14 +1104,19 @@ function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $
 		if (!($port = $t2['port'])) $port = 80;
 		if ($t2['user'])
 			$proxy_user = base64_encode($t2['user'] . ":" . $t2['pass']);
-	} else
+	}
+	else {
 		$first_host = $noproxy . $host;
+	}
 
 	if ($connect){
 		$streamContext = stream_context_create(array('ssl' => array('verify_peer' => false, 'allow_self_signed' => true)));
-		$f = @stream_socket_client("tcp://$first_host:$port", $nError, $sError, _INC_DISTANT_CONNECT_TIMEOUT, STREAM_CLIENT_CONNECT, $streamContext);
+		$f = @stream_socket_client("tcp://$first_host:$port", $errno, $errstr, _INC_DISTANT_CONNECT_TIMEOUT, STREAM_CLIENT_CONNECT, $streamContext);
 		spip_log("Recuperer $path sur $first_host:$port par $f (via CONNECT)", "connect");
-		if (!$f) return false;
+		if (!$f) {
+			spip_log("Erreur connexion $errno $errstr",_LOG_ERREUR);
+			return $errno;
+		}
 		stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
 
 		fputs($f, $connect);
@@ -1131,11 +1140,11 @@ function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $
 		$ntry = 3;
 		do {
 			$f = @fsockopen($first_host, $port, $errno, $errstr, _INC_DISTANT_CONNECT_TIMEOUT);
-		} while(!$f AND $ntry-- AND sleep(1));
+		} while(!$f AND $ntry-- AND $errno!==110 AND sleep(1));
 		spip_log("Recuperer $path sur $first_host:$port par $f");
 		if (!$f) {
 			spip_log("Erreur connexion $errno $errstr",_LOG_ERREUR);
-			return false;
+			return $errno;
 		}
 		stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
 	}