[pypy-svn] r39886 - pypy/dist/pypy/rlib

ac at codespeak.net ac at codespeak.net
Sun Mar 4 15:18:44 CET 2007


Author: ac
Date: Sun Mar  4 15:18:42 2007
New Revision: 39886

Modified:
   pypy/dist/pypy/rlib/rsocket.py
Log:
(rxe, arre)
Add explicit keepalives to work around rctypes not doing The Right Thing.


Modified: pypy/dist/pypy/rlib/rsocket.py
==============================================================================
--- pypy/dist/pypy/rlib/rsocket.py	(original)
+++ pypy/dist/pypy/rlib/rsocket.py	Sun Mar  4 15:18:42 2007
@@ -329,6 +329,7 @@
             sun.sun_path[len(path)] = 0
         for i in range(len(path)):
             sun.sun_path[i] = ord(path[i])
+        self.sun = sun
         self.addr = cast(pointer(sun), _c.sockaddr_ptr).contents
         self.addrlen = offsetof(_c.sockaddr_un, 'sun_path') + len(path)
 
@@ -375,6 +376,7 @@
             addr = _c.sockaddr_nl(nl_family = AF_NETLINK)
             addr.nl_pid = pid
             addr.nl_groups = groups
+            self._addr_keepalive_netlink = addr
             self.addr = cast(pointer(addr), _c.sockaddr_ptr).contents
             self.addrlen = sizeof(addr)
 
@@ -416,7 +418,7 @@
         result = instantiate(familyclass(family))
     elif result.family != family:
         raise RSocketError("address family mismatched")
-    paddr = copy_buffer(cast(addrptr, POINTER(c_char)), addrlen)
+    paddr = result._addr_keepalive0 = copy_buffer(cast(addrptr, POINTER(c_char)), addrlen)
     result.addr = cast(paddr, _c.sockaddr_ptr).contents
     result.addrlen = addrlen
     return result
@@ -429,6 +431,7 @@
     sin = _c.sockaddr_in(sin_family = AF_INET)   # PLAT sin_len
     sin.sin_addr.s_addr = s_addr
     paddr = cast(pointer(sin), _c.sockaddr_ptr)
+    result._addr_keepalive1 = sin
     result.addr = paddr.contents
     result.addrlen = sizeof(_c.sockaddr_in)
     return result
@@ -437,6 +440,7 @@
     klass = familyclass(family)
     buf = create_string_buffer(klass.maxlen)
     result = instantiate(klass)
+    result._addr_keepalive2 = buf
     result.addr = cast(buf, _c.sockaddr_ptr).contents
     result.addrlen = 0
     return result, len(buf)



More information about the Pypy-commit mailing list