[pypy-svn] r42663 - in pypy/dist/pypy: module/select rlib

afa at codespeak.net afa at codespeak.net
Fri May 4 11:03:17 CEST 2007


Author: afa
Date: Fri May  4 11:03:16 2007
New Revision: 42663

Modified:
   pypy/dist/pypy/module/select/interp_select.py
   pypy/dist/pypy/rlib/_rsocket_ctypes.py
Log:
The select module now correctly translates on win32.
It even seem to work.


Modified: pypy/dist/pypy/module/select/interp_select.py
==============================================================================
--- pypy/dist/pypy/module/select/interp_select.py	(original)
+++ pypy/dist/pypy/module/select/interp_select.py	Fri May  4 11:03:16 2007
@@ -143,11 +143,10 @@
                 return space.newlist([])
 
             if ret < 0: # WSA_WAIT_FAILED is unsigned...
-                from pypy.rlib._rsocket_ctypes import socket_strerror, geterrno
-                errno = geterrno()
+                errno = _c.geterrno()
                 w_module = space.getbuiltinmodule('select')
                 w_errortype = space.getattr(w_module, space.wrap('error'))
-                message = socket_strerror(errno)
+                message = _c.socket_strerror(errno)
                 raise OperationError(w_errortype,
                                      space.newtuple([space.wrap(errno),
                                                      space.wrap(message)]))

Modified: pypy/dist/pypy/rlib/_rsocket_ctypes.py
==============================================================================
--- pypy/dist/pypy/rlib/_rsocket_ctypes.py	(original)
+++ pypy/dist/pypy/rlib/_rsocket_ctypes.py	Fri May  4 11:03:16 2007
@@ -140,6 +140,8 @@
 FD_READ FD_WRITE FD_ACCEPT FD_CONNECT FD_CLOSE
 WSA_WAIT_TIMEOUT WSA_WAIT_FAILED INFINITE
 FD_CONNECT_BIT FD_CLOSE_BIT
+WSA_IO_PENDING WSA_IO_INCOMPLETE WSA_INVALID_HANDLE
+WSA_INVALID_PARAMETER WSA_NOT_ENOUGH_MEMORY WSA_OPERATION_ABORTED
 '''.split()
 
 for name in constant_names:
@@ -261,10 +263,11 @@
                                              ('revents', c_short)])
 if _MS_WINDOWS:
     CConfig.WSAEVENT = ctypes_platform.SimpleType('WSAEVENT', c_void_p)
-    CConfig.WSANETWORKEVENTS = ctypes_platform.Struct('WSANETWORKEVENTS',
-                                  [('lNetworkEvents', c_long),
-                                   ('iErrorCode', c_int * 10), #FD_MAX_EVENTS
-                                   ])
+    CConfig.WSANETWORKEVENTS = ctypes_platform.Struct(
+        'struct _WSANETWORKEVENTS',
+        [('lNetworkEvents', c_long),
+         ('iErrorCode', c_int * 10), #FD_MAX_EVENTS
+         ])
     
 
 CConfig.timeval = ctypes_platform.Struct('struct timeval',
@@ -685,8 +688,18 @@
         # errno.WSANO_RECOVERY: "Unexpected server error encountered",
         # errno.WSANO_DATA: "Valid name without requested data",
         # errno.WSANO_ADDRESS: "No address, look for MX record",
+
+        # select() errors
+        WSA_IO_PENDING: "WSA_IO_PENDING",
+        WSA_IO_INCOMPLETE: "WSA_IO_INCOMPLETE",
+        WSA_INVALID_HANDLE: "WSA_INVALID_HANDLE",
+        WSA_INVALID_PARAMETER: "WSA_INVALID_PARAMETER",
+        WSA_NOT_ENOUGH_MEMORY: "WSA_NOT_ENOUGH_MEMORY",
+        WSA_OPERATION_ABORTED: "WSA_OPERATION_ABORTED",
         }
 
+    assert len(WIN32_ERROR_MESSAGES) == 53 # detect duplicates
+
     def socket_strerror(errno):
         return WIN32_ERROR_MESSAGES.get(errno, "winsock error %d" % errno)
 else:



More information about the Pypy-commit mailing list