[Python-Dev] test_bind_port and test_find_unused_port fail due to missing SO_REUSEPORT when building Python 3.3.2-r2 (from portage) on 3.7.10-gentoo-r1 kernel

Reuben Garrett reubengarrett at gmail.com
Tue Dec 3 16:24:40 CET 2013


Greetings, learned Python devs!

Apologies in advance if my message is misdirected. I'm building Python
3.3.2-r2 from Gentoo's Portage tree [1] and encountered two failed tests
which probably should not have been attempted on my OS (Gentoo 3.7.10):
test_bind_port and test_find_unused_port both use the SO_REUSEPORT socket
option which, to the best of my knowledge is only available since kernel
version 3.9. I was able to build by skipping the tests — but I believe the
tests are there for a reason, and it would be best if a test that is known
to fail should be skipped (or replaced with a fallback that is likely to
succeed). Issue # 16594 [3] may be related (not sure).

Is it possible to detect the kernel version and skip (or modify) these
tests if SO_REUSEPORT is not available? If I'm missing something obvious
(or should be reporting this elsewhere), please educate me so I can better
respect your attention next time around :]


+=== excerpt of portage build log:
======================================================================
ERROR: test_bind_port (test.test_support.TestSupport)
----------------------------------------------------------------------
Traceback (most recent call last):
  File
"/var/tmp/portage/dev-lang/python-3.3.2-r2/work/Python-3.3.2/Lib/test/test_support.py",
line 87, in test_bind_port
    support.bind_port(s)
  File
"/var/tmp/portage/dev-lang/python-3.3.2-r2/work/Python-3.3.2/Lib/test/support.py",
line 548, in bind_port
    if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 1:
OSError: [Errno 92] Protocol not available

======================================================================
ERROR: test_find_unused_port (test.test_support.TestSupport)
----------------------------------------------------------------------
Traceback (most recent call last):
  File
"/var/tmp/portage/dev-lang/python-3.3.2-r2/work/Python-3.3.2/Lib/test/test_support.py",
line 80, in test_find_unused_port
    port = support.find_unused_port()
  File
"/var/tmp/portage/dev-lang/python-3.3.2-r2/work/Python-3.3.2/Lib/test/support.py",
line 522, in find_unused_port
    port = bind_port(tempsock)
  File
"/var/tmp/portage/dev-lang/python-3.3.2-r2/work/Python-3.3.2/Lib/test/support.py",
line 548, in bind_port
    if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 1:
OSError: [Errno 92] Protocol not available
===+

[1]: https://packages.gentoo.org/package/dev-lang/python
[2]: https://lwn.net/Articles/542629/
[3]: http://bugs.python.org/issue16594

-- 
Best regards,
Reuben Garrett
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20131203/3880f2d5/attachment.html>


More information about the Python-Dev mailing list