Bug #8104

Updated by Peter Amstutz over 8 years ago

Symptom: keepclient fails with @TypeError: _socket_open() takes at least 3 arguments (2 given)@ 

 This is due to an API change in PyCurl: 


 Version 7.21.5 [requires libcurl-7.19.0 or better] - 2016-01-05 
         * Breaking change: OPENSOCKETFUNCTION callback API now mirrors that 
           of libcurl: 
           1. The callback now takes two arguments, `purpose' and `address`. 
              Previously the callback took `family', `socktype', `protocol` 
              and `addr' arguments. 
           2. The second argument to the callback, `address', is a 
              `namedtuple' with `family', `socktype', `protocol' and 
              `addr' fields. 
           3. `addr' field on `address' for AF_INET6 family addresses is a 
              4-tuple of (address, port, flow info, scope id) which matches 
              Python's `socket.getaddrinfo' API. 

           It seems that libcurl may mishandle error return from an 
           opensocket callback, as would happen when code written for 
           pre-PycURL 7.21.5 API is run with PycURL 7.21.5 or newer, 
           resulting in the application hanging. 

 As a quick fix, we can add a version constraint @<7.21.5@ to prevent installing the newest PyCurl package.