Uncaught socket.timeout during post

Hallo requests devs (and thanks for an awesome lib)

During a specific `requests.post` I most of the time get a `requests.exceptions.Timeout` (on timeouts) but I also sometimes get a `socket.timeout` exception. Since there is a requests exception for it, I assume that the socket exception was supposed to be caught and the requests one raise instead. The full stack trace is: 

``` python
Traceback (most recent call last):
  File "test.py", line 132, in <module>
    test_stuff()
  File "test.py", line 113, in test_stuff
    browse_recursively()
  File "test.py", line 106, in browse_recursively
    browse_recursively(new_item, level + 1)
  File "test.py", line 106, in browse_recursively
    browse_recursively(new_item, level + 1)
  File "test.py", line 106, in browse_recursively
    browse_recursively(new_item, level + 1)
  File "test.py", line 106, in browse_recursively
    browse_recursively(new_item, level + 1)
  File "test.py", line 101, in browse_recursively
    for new_item in wimp.browse(item):
  File "/home/kenneth/code/soco/SoCo/soco/plugins/wimp.py", line 207, in browse
    response = post(self._url, headers, body)
  File "/home/kenneth/code/soco/SoCo/soco/plugins/wimp.py", line 40, in post
    out = requests.post(url, headers=headers, data=body, timeout=1.0)
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 87, in post
    return request('post', url, data=data, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 279, in request
    resp = self.send(prep, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 374, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 222, in send
    r.content
  File "/usr/lib/python2.7/dist-packages/requests/models.py", line 550, in content
    self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes()
  File "/usr/lib/python2.7/dist-packages/requests/utils.py", line 363, in stream_decompress
    for chunk in iterator:
  File "/usr/lib/python2.7/dist-packages/requests/models.py", line 496, in generate
    chunk = self.raw.read(chunk_size)
  File "/usr/lib/python2.7/dist-packages/urllib3/response.py", line 146, in read
    return self._fp.read(amt)
  File "/usr/lib/python2.7/httplib.py", line 567, in read
    s = self.fp.read(amt)
  File "/usr/lib/python2.7/socket.py", line 380, in read
    data = self._sock.recv(left)
socket.timeout: timed out
```

The development is for a plugin for the music service Wimp for the [SoCo](https://github.com/SoCo/SoCo) project, which means that I could post code to reproduce, but you will not be able to run it without a Sonos speaker and a Wimp subscription. I understand if this difficulty to reproduce may mean that you cannot work with this issue.

Thanks in advance Kenneth


Thanks so much for this! :cake:

This looks like a good catch. I think the generator created in `Response.iter_content` should probably be looking for Timeout errors, both from urllib3 and from the socket module, and should catch and wrap them. @sigmavirus24?


Sounds like a good idea to me


i think this is the underlying issue in urllib3: https://github.com/shazow/urllib3/pull/297


Thanks!