[pypy-svn] r25846 - pypy/dist/pypy/rpython/rctypes/socketmodule

arigo at codespeak.net arigo at codespeak.net
Sat Apr 15 11:49:48 CEST 2006


Author: arigo
Date: Sat Apr 15 11:49:47 2006
New Revision: 25846

Modified:
   pypy/dist/pypy/rpython/rctypes/socketmodule/_socket.py
   pypy/dist/pypy/rpython/rctypes/socketmodule/ctypes_socket.py
Log:
Some more lines in there.  Doesn't run, no tests, bad me.


Modified: pypy/dist/pypy/rpython/rctypes/socketmodule/_socket.py
==============================================================================
--- pypy/dist/pypy/rpython/rctypes/socketmodule/_socket.py	(original)
+++ pypy/dist/pypy/rpython/rctypes/socketmodule/_socket.py	Sat Apr 15 11:49:47 2006
@@ -1,3 +1,4 @@
+from ctypes import c_char_p, POINTER, byref
 import ctypes_socket as _c
 
 
@@ -36,6 +37,46 @@
             caddr = sockaddr_in()
             caddr.sin_family = AF_INET
             caddr.sin_port   = port
-            caddr.sin_addr.s_addr = getaddrinfo(host)
+            caddr.sin_addr.s_addr = XXX(host)
         else:
             XXX
+
+
+def makesockaddr(caddr, caddrlen, proto):
+    if addrlen == 0:
+        # No address -- may be recvfrom() from known socket
+        return None
+    if caddr.sa_family == AF_INET:
+        return makeipaddr(caddr), _c.ntohs(
+    else:
+        XXX
+
+def getaddrinfo(host, port, family=AF_UNSPEC, socktype=0, proto=0, flags=0):
+    if isinstance(port, (int, long)):
+        port = str(port)
+    hptr = c_char_p(host)   # string or None
+    pptr = c_char_p(port)   # int or string or None
+    hints = _c.addrinfo()
+    hints.ai_family = family
+    hints.ai_socktype = socktype
+    hints.ai_protocol = proto
+    hints.ai_flags = flags
+    res0 = POINTER(_c.addrinfo)()
+    error = _c.getaddrinfo(hptr, pptr, byref(hints), byref(res0))
+    if error:
+        XXX
+    try:
+        return _getaddrinfo_chainedlist(res0)
+    finally:
+        if res0:
+            _c.freeaddrinfo(res0)
+
+def _getaddrinfo_chainedlist(res):
+    result = []
+    while res:
+        res = res.contents
+        addr = makesockaddr(res.ai_addr, res.ai_addrlen, proto)
+        result.append((res.ai_family, res.ai_socktype, res.ai_protocol,
+                       res.ai_canonname or "", addr))
+        res = res.ai_next
+    return result

Modified: pypy/dist/pypy/rpython/rctypes/socketmodule/ctypes_socket.py
==============================================================================
--- pypy/dist/pypy/rpython/rctypes/socketmodule/ctypes_socket.py	(original)
+++ pypy/dist/pypy/rpython/rctypes/socketmodule/ctypes_socket.py	Sat Apr 15 11:49:47 2006
@@ -8,6 +8,7 @@
 
 # constants
 for name in ['AF_INET',
+             'AF_UNSPEC',
              'SOCK_STREAM',
              'SOCK_DGRAM',
              ]:



More information about the Pypy-commit mailing list