[pypy-svn] r26674 - pypy/dist/pypy/module/_socket

ale at codespeak.net ale at codespeak.net
Tue May 2 17:18:48 CEST 2006


Author: ale
Date: Tue May  2 17:18:47 2006
New Revision: 26674

Modified:
   pypy/dist/pypy/module/_socket/interp_socket.py
Log:
small progress in translating _socket

Modified: pypy/dist/pypy/module/_socket/interp_socket.py
==============================================================================
--- pypy/dist/pypy/module/_socket/interp_socket.py	(original)
+++ pypy/dist/pypy/module/_socket/interp_socket.py	Tue May  2 17:18:47 2006
@@ -8,6 +8,7 @@
 from pypy.rpython.rctypes.socketmodule import ctypes_socket as _c
 import ctypes
 from pypy.rpython.rctypes import implementation as rctypes_implemetation
+from pypy.rpython.rarithemetic import intmask
 import errno
 
 IPV4_ADDRESS_SIZE = 4
@@ -606,12 +607,12 @@
     if retval != 0:
         raise w_get_socketgaierror(space, None, retval)
 
-    try:
-        result = []
-        next = res
-        while next:
-            info = next.contents
-            next = info.ai_next
+    result = []
+    next = res
+    while next:
+        info = next.contents
+        next = info.ai_next
+        try:
             w_family = space.wrap(info.ai_family)
             w_socktype = space.wrap(info.ai_socktype)
             w_proto = space.wrap(info.ai_protocol)
@@ -620,13 +621,16 @@
             else:
                 w_canonname = space.wrap('')
             w_addr = w_makesockaddr(space,
-                                    _c.cast(info.ai_addr, _c.sockaddr_ptr),
-                                    info.ai_addrlen, info.ai_protocol)
+            _c.cast(info.ai_addr, _c.sockaddr_ptr),
+                    info.ai_addrlen, info.ai_protocol)
             result.append(space.newtuple([w_family, w_socktype, w_proto,
-                                           w_canonname, w_addr]))
-        return space.newlist(result)
-    finally:
-        _c.freeaddrinfo(res)
+                                w_canonname, w_addr]))
+        except:
+            _c.freeaddrinfo(res)
+            raise
+    res = space.newlist(result)
+    _c.freeaddrinfo(res)
+    return res
 getaddrinfo.unwrap_spec = [ObjSpace, W_Root, W_Root, int, int, int, int]
 
 def getnameinfo(space, w_sockaddr, flags):
@@ -781,7 +785,7 @@
                 raise w_get_socketgaierror(space, None, retval)
             addrinfo = res.contents
             addrlen = addrinfo.ai_addrlen
-            caddr_buf = ctypes.create_string_buffer(int(addrlen)) # XXX forcing a long to an int
+            caddr_buf = ctypes.create_string_buffer(intmask(addrlen)) # XXX forcing a long to an int
             _c.memcpy(caddr_buf, addrinfo.ai_addr, addrlen)
             
             sockaddr_ptr = ctypes.cast(caddr_buf, _c.sockaddr_ptr)
@@ -985,9 +989,10 @@
         """
         buf = _c.create_string_buffer(buffersize)
         sockaddr = _c.sockaddr()
+        sockaddr_size = _c.socklen_t()
         read_bytes = _c.recvfrom(self.fd, buf, buffersize, flags,
-                                 _c.pointer(sockaddr), _c.sockaddr_size)
-        w_addr = w_makesockaddr(space, _c.pointer(sockaddr), _c.sockaddr_size, self.proto)
+                                 _c.pointer(sockaddr), _c.pointer(sockaddr_size))
+        w_addr = w_makesockaddr(space, _c.pointer(sockaddr), sockaddr_size.value, self.proto)
         if read_bytes < 0:
             raise w_get_socketerror(space, None, _c.geterrno())
         return space.newtuple([space.wrap(buf[:read_bytes]), w_addr])
@@ -1059,12 +1064,14 @@
         """
         if space.is_true(space.isinstance(w_value, space.w_str)):
             strvalue = space.str_w(w_value)
+            size = _c.socklen_t(len(strvalue))
             _c.socketsetsockopt(self.fd, level, option, strvalue,
-                          len(strvalue))
+                          size)
         else:
             intvalue = ctypes.c_int(space.int_w(w_value))
+            size = _c.socklen_t(_c.c_int_size)
             _c.socketsetsockopt(self.fd, level, option, _c.pointer(intvalue),
-                           _c.c_int_size)
+                           size)
     setsockopt.unwrap_spec = ['self', ObjSpace, int, int, W_Root]
 
     def gettimeout(self, space):



More information about the Pypy-commit mailing list