[pypy-svn] r18970 - in pypy/dist/pypy/module/_socket: . rpython

afa at codespeak.net afa at codespeak.net
Tue Oct 25 20:10:28 CEST 2005


Author: afa
Date: Tue Oct 25 20:10:22 2005
New Revision: 18970

Modified:
   pypy/dist/pypy/module/_socket/interp_socket.py
   pypy/dist/pypy/module/_socket/rpython/rsocket.py
Log:
Yet another correction for socket.getaddrinfo()


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 Oct 25 20:10:22 2005
@@ -328,9 +328,11 @@
 
 def enumerateaddrinfo(space, addr):
     result = []
-    while addr.nextinfo():
-        info = (addr.family, addr.socktype, addr.proto,
-                addr.canonname, addr.sockaddr)
+    while True:
+        addrinfo = addr.nextinfo()
+        if addrinfo[0] == 0:
+            break
+        info = addrinfo[:4] + (addrinfo[4:],)
         result.append(space.wrap(info))
     return space.newlist(result)
 

Modified: pypy/dist/pypy/module/_socket/rpython/rsocket.py
==============================================================================
--- pypy/dist/pypy/module/_socket/rpython/rsocket.py	(original)
+++ pypy/dist/pypy/module/_socket/rpython/rsocket.py	Tue Oct 25 20:10:22 2005
@@ -1,26 +1,27 @@
 """
-Helper file for Python equivalents of os specific calls.
+Helper file for Python equivalents of socket specific calls.
 """
 
 import socket
 
 class ADDRINFO(object):
+    # a simulated addrinfo structure from C, i.e. a chained list
+    # returned by getaddrinfo()
     def __init__(self, host, port, family, socktype, proto, flags):
-        self._entries = iter(socket.getaddrinfo(
-            host, port, family, socktype, proto, flags))
-        
+        addrinfo = socket.getaddrinfo(host, port,
+                                      family, socktype, proto, flags)
+        self._entries = iter(addrinfo)
+
     def nextinfo(self):
         try:
             info = self._entries.next()
         except StopIteration:
-            return None
-        (self.family, self.socktype, self.proto,
-         self.canonname, self.sockaddr) = info
-        return info[:4] + info[4]
+            return [0] * 8
+
+        return info[:-1] + info[-1]
 
     def free(self):
         pass
-        
 
 def getaddrinfo(host, port, family, socktype, proto, flags):
     return ADDRINFO(host, port, family, socktype, proto, flags)



More information about the Pypy-commit mailing list