[pypy-svn] r56186 - pypy/dist/pypy/rlib
afa at codespeak.net
afa at codespeak.net
Mon Jun 30 19:33:59 CEST 2008
Author: afa
Date: Mon Jun 30 19:33:57 2008
New Revision: 56186
Modified:
pypy/dist/pypy/rlib/_rsocket_rffi.py
pypy/dist/pypy/rlib/rsocket.py
Log:
win32 now uses the same select() implementation as posix platforms.
This should correct the translation of the socket module on windows.
Modified: pypy/dist/pypy/rlib/_rsocket_rffi.py
==============================================================================
--- pypy/dist/pypy/rlib/_rsocket_rffi.py (original)
+++ pypy/dist/pypy/rlib/_rsocket_rffi.py Mon Jun 30 19:33:57 2008
@@ -53,8 +53,7 @@
COND_HEADER = ''
constants = {}
-if _POSIX:
- sources = ["""
+sources = ["""
void pypy_macro_wrapper_FD_SET(int fd, fd_set *set)
{
FD_SET(fd, set);
@@ -73,13 +72,16 @@
}
"""]
-else:
- sources = []
eci = ExternalCompilationInfo(
post_include_bits = [HEADER, COND_HEADER],
includes = includes,
libraries = libraries,
separate_module_sources = sources,
+ export_symbols = ['pypy_macro_wrapper_FD_ZERO',
+ 'pypy_macro_wrapper_FD_SET',
+ 'pypy_macro_wrapper_FD_CLR',
+ 'pypy_macro_wrapper_FD_ISSET',
+ ],
)
class CConfig:
@@ -304,13 +306,7 @@
[('tv_sec', rffi.LONG),
('tv_usec', rffi.LONG)])
-if _MS_WINDOWS:
- CConfig.fd_set = platform.Struct('struct fd_set',
- [('fd_count', rffi.UINT),
- # XXX use FD_SETSIZE
- ('fd_array', rffi.CFixedArray(socketfd_type, 64))])
-else:
- fd_set = rffi.COpaquePtr('fd_set', compilation_info=eci)
+fd_set = rffi.COpaquePtr('fd_set', compilation_info=eci)
if _MS_WINDOWS:
CConfig.WSAData = platform.Struct('struct WSAData',
@@ -400,8 +396,6 @@
WSAEVENT = cConfig.WSAEVENT
WSANETWORKEVENTS = cConfig.WSANETWORKEVENTS
timeval = cConfig.timeval
-if _MS_WINDOWS:
- fd_set = cConfig.fd_set
#if _POSIX:
# includes = list(includes)
@@ -415,6 +409,10 @@
return rffi.llexternal(name, args, result, compilation_info=eci,
calling_conv=calling_conv)
+def external_c(name, args, result):
+ return rffi.llexternal(name, args, result, compilation_info=eci,
+ calling_conv='c')
+
if _POSIX:
dup = external('dup', [socketfd_type], socketfd_type)
gai_strerror = external('gai_strerror', [rffi.INT], CCHARP)
@@ -503,25 +501,22 @@
[socketfd_type, rffi.LONG, rffi.ULONGP],
rffi.INT)
+select = external('select',
+ [rffi.INT, fd_set, fd_set,
+ fd_set, lltype.Ptr(timeval)],
+ rffi.INT)
+
+FD_CLR = external_c('pypy_macro_wrapper_FD_CLR', [rffi.INT, fd_set], lltype.Void)
+FD_ISSET = external_c('pypy_macro_wrapper_FD_ISSET', [rffi.INT, fd_set], rffi.INT)
+FD_SET = external_c('pypy_macro_wrapper_FD_SET', [rffi.INT, fd_set], lltype.Void)
+FD_ZERO = external_c('pypy_macro_wrapper_FD_ZERO', [fd_set], lltype.Void)
+
if _POSIX:
pollfdarray = rffi.CArray(pollfd)
poll = external('poll', [lltype.Ptr(pollfdarray), nfds_t, rffi.INT],
rffi.INT)
- select = external('select',
- [rffi.INT, fd_set, fd_set,
- fd_set, lltype.Ptr(timeval)],
- rffi.INT)
-
- FD_CLR = external('pypy_macro_wrapper_FD_CLR', [rffi.INT, fd_set], lltype.Void)
- FD_ISSET = external('pypy_macro_wrapper_FD_ISSET', [rffi.INT, fd_set], rffi.INT)
- FD_SET = external('pypy_macro_wrapper_FD_SET', [rffi.INT, fd_set], lltype.Void)
- FD_ZERO = external('pypy_macro_wrapper_FD_ZERO', [fd_set], lltype.Void)
elif MS_WINDOWS:
- select = external('select',
- [rffi.INT, lltype.Ptr(fd_set), lltype.Ptr(fd_set),
- lltype.Ptr(fd_set), lltype.Ptr(timeval)],
- rffi.INT)
#
# The following is for pypy.rlib.rpoll
#
Modified: pypy/dist/pypy/rlib/rsocket.py
==============================================================================
--- pypy/dist/pypy/rlib/rsocket.py (original)
+++ pypy/dist/pypy/rlib/rsocket.py Mon Jun 30 19:33:57 2008
@@ -587,10 +587,10 @@
rffi.setintfield(tv, 'c_tv_sec', int(timeout))
rffi.setintfield(tv, 'c_tv_usec', int((timeout-int(timeout))
* 1000000))
- fds = rffi.make(_c.fd_set)
- rffi.setintfield(fds, 'c_fd_count', 1)
- fds.c_fd_array[0] = rffi.cast(_c.socketfd_type, self.fd)
- null = lltype.nullptr(_c.fd_set)
+ fds = rffi.malloc(_c.fd_set.TO, flavor='raw')
+ _c.FD_ZERO(fds)
+ _c.FD_SET(self.fd, fds)
+ null = lltype.nullptr(_c.fd_set.TO)
if for_writing:
n = _c.select(self.fd + 1, null, fds, null, tv)
else:
More information about the Pypy-commit
mailing list