Updated by Peter Amstutz over 7 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: From http://pycurl.sourceforge.net/ChangeLog <pre> 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. </pre> As a quick fix, we can add a version constraint @<7.21.5@ to prevent installing the newest PyCurl package.