title: How to specify "socket_options" in python-requests lib since urllib3 v1.8.3 has been added the "socket_options" feature?
body: <p>urllib3 V1.8.3 has been added the feature "socket_options". For me, I want to specify (socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) in requests lib. But I've no idea how.
  <a href="https://pypi.python.org/pypi/urllib3#changes" rel="nofollow">Here</a> is the version change log of urllib3.
  Here is the sample of the new feature in urllib3:</p>
  
  <pre><code>    def test_socket_options(self):
      """Test that connections accept socket options."""
      # This test needs to be here in order to be run. socket.create_connection actually tries to
      # connect to the host provided so we need a dummyserver to be running.
      pool = HTTPConnectionPool(self.host, self.port, socket_options=[
          (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
      ])
      s = pool._new_conn()._new_conn()  # Get the socket
      using_keepalive = s.getsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE) &gt; 0
      self.assertTrue(using_keepalive)
      s.close()
  </code></pre>
  
  <p>If version 1.8.3 is merged into new requests lib, how to specify the parameter. 
  Any answers will be appreciated.</p>
  
  <p>Here is my code:</p>
  
  <pre><code>import requests
  import socket
  
  from requests.adapters import HTTPAdapter
  from requests.packages.urllib3.poolmanager import PoolManager
  
  class SourceAddressAdapter(HTTPAdapter):
      def __init__(self, source_address, **kwargs):
          self.source_address = source_address
          super(SourceAddressAdapter, self).__init__(**kwargs)
      def init_poolmanager(self, connections, maxsize, block=False):
          self.poolmanager = PoolManager(num_pools=connections,
                                         maxsize=maxsize,
                                         block=block,
                                         socket_options=[(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)],
                                         source_address=self.source_address,
                                         )
  http_session = requests.Session()
  http_session.mount('http://', SourceAddressAdapter(('0.0.0.0', 1238)))
  print http_session.get('http://10.0.10.7')
  </code></pre>
  
  <p>And here is the error:</p>
  
  <pre><code>    Traceback (most recent call last):
    File "./tt.py", line 27, in &lt;module&gt;
      print http_session.get('http://10.0.10.7')
    File "/usr/local/lib/python2.7/site-packages/requests-2.3.0-py2.7.egg/requests/sessions.py", line 468, in get
      return self.request('GET', url, **kwargs)
    File "/usr/local/lib/python2.7/site-packages/requests-2.3.0-py2.7.egg/requests/sessions.py", line 456, in request
      resp = self.send(prep, **send_kwargs)
    File "/usr/local/lib/python2.7/site-packages/requests-2.3.0-py2.7.egg/requests/sessions.py", line 559, in send
      r = adapter.send(request, **kwargs)
    File "/usr/local/lib/python2.7/site-packages/requests-2.3.0-py2.7.egg/requests/adapters.py", line 375, in send
      raise ConnectionError(e, request=request)
  requests.exceptions.ConnectionError: HTTPConnectionPool(host='10.0.10.7', port=80): Max retries exceeded with url: / (Caused by &lt;class 'socket.error'&gt;: [Errno 98] Address already in use)
  </code></pre>
  
  <p>=============================================================================== </p>
  
  <p>I have tried to use urllib3 v1.9 to set the (socket.SOL_SOCKET, socket.SO_REUSEADDR, 1), but it failed. The reason why source port in time_wait state can't be reused may be "(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)" should be configured before "socket.bind". So even I set the REUSEADDR parameter in the "HTTPConnectionPool", src port in time_wait state could NOT be used. So sad..</p>
  
  <p>Here is my try:</p>
  
  <pre><code>#!/usr/bin/python
  import socket
  from urllib3 import (
      encode_multipart_formdata,
      HTTPConnectionPool,
      )
  
  pool = HTTPConnectionPool('10.0.10.7', 80, 
                            socket_options=[(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)],
                            source_address=('10.0.10.11',1239))
  r=pool.request('GET','/')
  </code></pre>
  
  <p>And here is the error:</p>
  
  <pre><code>    Traceback (most recent call last):
    File "./aa.py", line 10, in &lt;module&gt;
      r=pool.request('GET','/')
    File "build/bdist.linux-x86_64/egg/urllib3/request.py", line 68, in request
    File "build/bdist.linux-x86_64/egg/urllib3/request.py", line 81, in request_encode_url
    File "build/bdist.linux-x86_64/egg/urllib3/connectionpool.py", line 579, in urlopen
    File "build/bdist.linux-x86_64/egg/urllib3/connectionpool.py", line 579, in urlopen
    File "build/bdist.linux-x86_64/egg/urllib3/connectionpool.py", line 579, in urlopen
    File "build/bdist.linux-x86_64/egg/urllib3/connectionpool.py", line 559, in urlopen
    File "build/bdist.linux-x86_64/egg/urllib3/util/retry.py", line 265, in increment
  urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='10.0.10.7', port=80): Max retries exceeded with url: / (Caused by ProtocolError('Connection aborted.', error(98, 'Address already in use')))
  </code></pre>