Bug #8104
Updated by Peter Amstutz over 9 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.