[pypy-svn] r20970 - in pypy/dist/pypy: module/_socket module/_socket/rpython translator/c/src translator/c/test

nik at codespeak.net nik at codespeak.net
Fri Dec 9 20:25:48 CET 2005


Author: nik
Date: Fri Dec  9 20:25:46 2005
New Revision: 20970

Modified:
   pypy/dist/pypy/module/_socket/interp_socket.py
   pypy/dist/pypy/module/_socket/rpython/ll__socket.py
   pypy/dist/pypy/module/_socket/rpython/rsocket.py
   pypy/dist/pypy/translator/c/src/ll__socket.h
   pypy/dist/pypy/translator/c/test/test_ext__socket.py
Log:
(ale, nik)
make our low-level socket.connect() take a socket argument to be able to add IPv6
support in the future.


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	Fri Dec  9 20:25:46 2005
@@ -707,18 +707,19 @@
                     space.wrap("tuple of a string and an int required"))
             host = space.str_w(addr_w[0])
             port = space.int_w(addr_w[1])
-            try:
-                rsocket.connect(self.fd, host, port)
-            except OSError, ex:
-                raise w_get_socketerror(space, e.strerror, e.errno)
-            # XXX timeout doesn't really work at the moment
-            except socket.timeout:
-                raise wrap_timeouterror(space)
-            except socket.error, e:
-                raise wrap_socketerror(space, e)
+            sockname = (host, port, 0, 0)
         else:
             # XXX IPv6 and Unix sockets missing here
             pass
+        try:
+            rsocket.connect(self.fd, sockname)
+        except OSError, ex:
+            raise w_get_socketerror(space, e.strerror, e.errno)
+        # XXX timeout doesn't really work at the moment
+        except socket.timeout:
+            raise wrap_timeouterror(space)
+        except socket.error, e:
+            raise wrap_socketerror(space, e)
     connect.unwrap_spec = ['self', ObjSpace, W_Root]
 
     def connect_ex(self, space, w_addr):

Modified: pypy/dist/pypy/module/_socket/rpython/ll__socket.py
==============================================================================
--- pypy/dist/pypy/module/_socket/rpython/ll__socket.py	(original)
+++ pypy/dist/pypy/module/_socket/rpython/ll__socket.py	Fri Dec  9 20:25:46 2005
@@ -95,7 +95,7 @@
     return 0
 ll__socket_newsocket.suggested_primitive = True
 
-def ll__socket_connect(fd, host, port):
+def ll__socket_connect(fd, sockname):
     return None
 ll__socket_connect.suggested_primitive = True
 

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	Fri Dec  9 20:25:46 2005
@@ -40,13 +40,9 @@
     socket_cache[fileno] = s
     return fileno
 
-def connect(fd, host, port):
-    # XXX IPv4 only
+def connect(fd, sockname):
     s = socket_cache[fd]
-    try:
-        s.connect((host, port))
-    except Exception, ex:
-        print ex
+    s.connect(sockname[:2]) # XXX IPv4 only
 
 def getpeername(fd):
     s = socket_cache[fd]

Modified: pypy/dist/pypy/translator/c/src/ll__socket.h
==============================================================================
--- pypy/dist/pypy/translator/c/src/ll__socket.h	(original)
+++ pypy/dist/pypy/translator/c/src/ll__socket.h	Fri Dec  9 20:25:46 2005
@@ -102,18 +102,18 @@
     return fd;
 }
 
-void LL__socket_connect(int fd, RPyString *host, int port)
+void LL__socket_connect(int fd, RPySOCKET_SOCKNAME* sockname)
 {
     struct sockaddr_in addr;
     
-    if (setipaddr(RPyString_AsString(host), (struct sockaddr *) &addr,
+    if (setipaddr(RPyString_AsString(sockname->t_item0), (struct sockaddr *) &addr,
 		      sizeof(addr), AF_INET) < 0) {
         // XXX we actually want to raise socket.error
         RPYTHON_RAISE_OSERROR(errno);
         return NULL;
     }
     addr.sin_family = AF_INET;
-    addr.sin_port = htons(port);
+    addr.sin_port = htons(sockname->t_item1);
     if (connect(fd, &addr, sizeof(addr)) < 0) {
         // XXX we actually want to raise socket.error
         RPYTHON_RAISE_OSERROR(errno);

Modified: pypy/dist/pypy/translator/c/test/test_ext__socket.py
==============================================================================
--- pypy/dist/pypy/translator/c/test/test_ext__socket.py	(original)
+++ pypy/dist/pypy/translator/c/test/test_ext__socket.py	Fri Dec  9 20:25:46 2005
@@ -96,7 +96,7 @@
     def does_stuff():
         fd = rsocket.newsocket(_socket.AF_INET, _socket.SOCK_STREAM, 0)
         # XXX need to think of a test without connecting to outside servers
-        rsocket.connect(fd, "codespeak.net", 80)
+        rsocket.connect(fd, ("codespeak.net", 80, 0, 0))
         sockname = rsocket.getpeername(fd)
         os.close(fd)
         return sockname[1]
@@ -114,7 +114,7 @@
     ]
     def does_stuff(host, port):
         fd = rsocket.newsocket(_socket.AF_INET, _socket.SOCK_STREAM, 0)
-        rsocket.connect(fd, host, port)
+        rsocket.connect(fd, (host, port, 0, 0))
         os.close(fd)
     f1 = compile(does_stuff, [str, int])
     for args in tests:



More information about the Pypy-commit mailing list