Author: Matti Picus <matti.pi...@gmail.com>
Branch: win32-fixes4
Changeset: r70332:02e471453e7b
Date: 2014-03-30 06:12 +0300
http://bitbucket.org/pypy/pypy/changeset/02e471453e7b/

Log:    give up on poll() for win32, rely on lib-python -A test_ftplib for
        verification

diff --git a/pypy/module/_ssl/interp_ssl.py b/pypy/module/_ssl/interp_ssl.py
--- a/pypy/module/_ssl/interp_ssl.py
+++ b/pypy/module/_ssl/interp_ssl.py
@@ -35,7 +35,7 @@
 SOCKET_HAS_TIMED_OUT, SOCKET_HAS_BEEN_CLOSED = 2, 3
 SOCKET_TOO_LARGE_FOR_SELECT, SOCKET_OPERATION_OK = 4, 5
 
-HAVE_RPOLL = True  # Even win32 has rpoll.poll
+HAVE_RPOLL = 'poll' in dir(rpoll)
 
 constants = {}
 constants["SSL_ERROR_ZERO_RETURN"] = PY_SSL_ERROR_ZERO_RETURN
diff --git a/rpython/rlib/rpoll.py b/rpython/rlib/rpoll.py
--- a/rpython/rlib/rpoll.py
+++ b/rpython/rlib/rpoll.py
@@ -141,8 +141,9 @@
 # poll() for Win32
 #
 if hasattr(_c, 'WSAEventSelect'):
-
-    def poll(fddict, timeout=-1):
+    # WSAWaitForMultipleEvents is broken. If you wish to try it,
+    # rename the function to poll() and run test_exchange in test_rpoll
+    def _poll(fddict, timeout=-1):
         """'fddict' maps file descriptors to interesting events.
         'timeout' is an integer in milliseconds, and NOT a float
         number of seconds, but it's the same in CPython.  Use -1 for infinite.
@@ -188,6 +189,7 @@
             if timeout < 0:
                 timeout = _c.INFINITE
 
+            # XXX does not correctly report write status of a port
             ret = _c.WSAWaitForMultipleEvents(numevents, socketevents,
                                               False, timeout, False)
 
diff --git a/rpython/rlib/test/test_rpoll.py b/rpython/rlib/test/test_rpoll.py
--- a/rpython/rlib/test/test_rpoll.py
+++ b/rpython/rlib/test/test_rpoll.py
@@ -3,7 +3,10 @@
 import py
 
 from rpython.rlib.rsocket import *
-from rpython.rlib.rpoll import *
+try:
+    from rpython.rlib.rpoll import poll
+except ImportError:
+    py.test.skip('no poll available on this platform')
 from rpython.rtyper.test.test_llinterp import interpret
 
 def setup_module(mod):
@@ -62,6 +65,8 @@
     serv.close()
 
 def test_exchange():
+    if not poll:
+        py.test.skip('poll not available for this platform')
     serv = RSocket(AF_INET, SOCK_STREAM)
     serv.bind(INETAddress('127.0.0.1', INADDR_ANY))
     serv.listen(1)
@@ -71,9 +76,9 @@
     assert len(events) == 0
 
     cli = RSocket(AF_INET, SOCK_STREAM)
-    cli.setblocking(False)
+    cli.setblocking(True)
     err = cli.connect_ex(servaddr)
-    assert err != 0
+    assert err == 0
 
     events = poll({serv.fd: POLLIN}, timeout=500)
     one_in_event(events, serv.fd)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to