Capture and re-raise urllib3 ProtocolError
diff --git a/requests/adapters.py b/requests/adapters.py
index 3c1e979f14..bf94bbe7bd 100644
--- a/requests/adapters.py
+++ b/requests/adapters.py
@@ -23,6 +23,7 @@
 from .packages.urllib3.exceptions import HTTPError as _HTTPError
 from .packages.urllib3.exceptions import MaxRetryError
 from .packages.urllib3.exceptions import ProxyError as _ProxyError
+from .packages.urllib3.exceptions import ProtocolError
 from .packages.urllib3.exceptions import ReadTimeoutError
 from .packages.urllib3.exceptions import SSLError as _SSLError
 from .cookies import extract_cookies_to_jar
@@ -400,8 +401,8 @@ def send(self, request, stream=False, timeout=None, verify=True, cert=None, prox
                     # All is well, return the connection to the pool.
                     conn._put_conn(low_conn)
 
-        except socket.error as sockerr:
-            raise ConnectionError(sockerr, request=request)
+        except (ProtocolError, socket.error) as err:
+            raise ConnectionError(err, request=request)
 
         except MaxRetryError as e:
             if isinstance(e.reason, ConnectTimeoutError):
diff --git a/test_requests.py b/test_requests.py
index 716c0dcff6..2ff61248b5 100755
--- a/test_requests.py
+++ b/test_requests.py
@@ -286,6 +286,14 @@ def test_BASICAUTH_TUPLE_HTTP_200_OK_GET(self):
         r = s.get(url)
         assert r.status_code == 200
 
+    def test_connection_error(self):
+        """Connecting to an unknown domain should raise a ConnectionError"""
+        with pytest.raises(ConnectionError):
+            requests.get("http://fooobarbangbazbing.httpbin.org")
+
+        with pytest.raises(ConnectionError):
+            requests.get("http://httpbin.org:1")
+
     def test_basicauth_with_netrc(self):
         auth = ('user', 'pass')
         wrong_auth = ('wronguser', 'wrongpass')

Fixes #2192 
