[pypy-svn] r77332 - pypy/branch/fast-forward/pypy/module/_socket
afa at codespeak.net
afa at codespeak.net
Fri Sep 24 13:10:01 CEST 2010
Author: afa
Date: Fri Sep 24 13:09:59 2010
New Revision: 77332
Modified:
pypy/branch/fast-forward/pypy/module/_socket/interp_socket.py
Log:
Translation fix for socket.ioctl (Windows only)
Modified: pypy/branch/fast-forward/pypy/module/_socket/interp_socket.py
==============================================================================
--- pypy/branch/fast-forward/pypy/module/_socket/interp_socket.py (original)
+++ pypy/branch/fast-forward/pypy/module/_socket/interp_socket.py Fri Sep 24 13:09:59 2010
@@ -347,37 +347,34 @@
recv_ptr = lltype.malloc(rwin32.LPDWORD.TO, 1, flavor='raw')
try:
if cmd == _c.SIO_RCVALL:
- option_ptr = lltype.malloc(rffi.INTP.TO, 1, flavor='raw')
- try:
- option_ptr[0] = space.uint_w(w_option)
- option_ptr = rffi.cast(rffi.VOIDP, option_ptr)
- res = _c.WSAIoctl(
- self.fd, cmd,
- option_ptr, rffi.sizeof(rffi.INTP),
- rffi.NULL, 0, recv_ptr, rffi.NULL, rffi.NULL)
- if res < 0:
- raise error()
- finally:
- lltype.free(option_ptr, flavor='raw')
+ value_size = rffi.sizeof(rffi.INTP)
elif cmd == _c.SIO_KEEPALIVE_VALS:
- w_onoff, w_time, w_interval = space.unpackiterable(w_option)
- option_ptr = lltype.malloc(_c.tcp_keepalive, flavor='raw')
- try:
- option_ptr.c_onoff = space.uint_w(w_onoff)
- option_ptr.c_keepalivetime = space.uint_w(w_time)
- option_ptr.c_keepaliveinterval = space.uint_w(w_interval)
- option_ptr = rffi.cast(rffi.VOIDP, option_ptr)
- res = _c.WSAIoctl(
- self.fd, cmd,
- option_ptr, rffi.sizeof(_c.tcp_keepalive),
- rffi.NULL, 0, recv_ptr, rffi.NULL, rffi.NULL)
- if res < 0:
- raise error()
- finally:
- lltype.free(option_ptr, flavor='raw')
+ value_size = rffi.sizeof(_c.tcp_keepalive)
else:
raise operationerrfmt(space.w_ValueError,
"invalid ioctl command %d", cmd)
+
+ value_ptr = lltype.malloc(rffi.VOIDP.TO, value_size, flavor='raw')
+ try:
+ if cmd == _c.SIO_RCVALL:
+ option_ptr = rffi.cast(rffi.INTP, value_ptr)
+ option_ptr[0] = space.int_w(w_option)
+ elif cmd == _c.SIO_KEEPALIVE_VALS:
+ w_onoff, w_time, w_interval = space.unpackiterable(w_option)
+ option_ptr = rffi.cast(lltype.Ptr(_c.tcp_keepalive), value_ptr)
+ option_ptr.c_onoff = space.uint_w(w_onoff)
+ option_ptr.c_keepalivetime = space.uint_w(w_time)
+ option_ptr.c_keepaliveinterval = space.uint_w(w_interval)
+
+ res = _c.WSAIoctl(
+ self.fd, cmd, value_ptr, value_size,
+ rffi.NULL, 0, recv_ptr, rffi.NULL, rffi.NULL)
+ if res < 0:
+ raise converted_error(space, rsocket.last_error())
+ finally:
+ if value_ptr:
+ lltype.free(value_ptr, flavor='raw')
+
return space.wrap(recv_ptr[0])
finally:
lltype.free(recv_ptr, flavor='raw')
More information about the Pypy-commit
mailing list