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

nik at codespeak.net nik at codespeak.net
Fri Dec 9 17:04:47 CET 2005


Author: nik
Date: Fri Dec  9 17:04:45 2005
New Revision: 20947

Modified:
   pypy/dist/pypy/module/_socket/rpython/exttable.py
   pypy/dist/pypy/module/_socket/rpython/ll__socket.py
   pypy/dist/pypy/translator/c/extfunc.py
   pypy/dist/pypy/translator/c/src/ll__socket.h
   pypy/dist/pypy/translator/c/test/test_ext__socket.py
Log:
(ale, nik)
got basic connect() and getpeername() working (for IPv4). still needs error handling.


Modified: pypy/dist/pypy/module/_socket/rpython/exttable.py
==============================================================================
--- pypy/dist/pypy/module/_socket/rpython/exttable.py	(original)
+++ pypy/dist/pypy/module/_socket/rpython/exttable.py	Fri Dec  9 17:04:45 2005
@@ -47,7 +47,6 @@
 declare(rsocket.newsocket, int, '%s/newsocket' % module)
 declare(rsocket.connect, noneannotation, '%s/connect' % module)
 declare(rsocket.getpeername, ann_sockname, '%s/getpeername' % module)
-declare(rsocket.freesockname, noneannotation, '%s/freesockname' % module)
 
 # ____________________________________________________________
 # _socket.error can be raised by the above

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 17:04:45 2005
@@ -102,7 +102,3 @@
 def ll__socket_getpeername(fd):
     return ("", 0, 0, 0)
 ll__socket_getpeername.suggested_primitive = True
-
-def ll__socket_freesockname(sockname):
-    return None
-ll__socket_freesockname.suggested_primitive = True

Modified: pypy/dist/pypy/translator/c/extfunc.py
==============================================================================
--- pypy/dist/pypy/translator/c/extfunc.py	(original)
+++ pypy/dist/pypy/translator/c/extfunc.py	Fri Dec  9 17:04:45 2005
@@ -69,7 +69,6 @@
     ll__socket.ll__socket_newsocket: 'LL__socket_newsocket',
     ll__socket.ll__socket_connect: 'LL__socket_connect',
     ll__socket.ll__socket_getpeername: 'LL__socket_getpeername',
-    ll__socket.ll__socket_freesockname: 'LL__socket_freesockname',
     }
 
 #______________________________________________________

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 17:04:45 2005
@@ -102,12 +102,12 @@
 {
     struct sockaddr_in addr;
     
-    addr.sin_family = AF_INET;
-    addr.sin_port = htons((short)port);
     if (setipaddr(RPyString_AsString(host), (struct sockaddr *) &addr,
 		      sizeof(addr), AF_INET) < 0) {
-        // XXX raise some error here 
+        // XXX raise some error here
     }
+    addr.sin_family = AF_INET;
+    addr.sin_port = htons(port);
     if (connect(fd, &addr, sizeof(addr)) < 0) {
         // XXX raise some error here
     }
@@ -122,18 +122,17 @@
     
     memset((void *) &addr, '\0', sizeof(addr));
     if (getpeername(fd, (struct sockaddr *) &addr, &addr_len) < 0) {
-        // XXX raise some error
+        // XXX raise some error here
     }
     
     host = RPyString_FromString(inet_ntoa(addr.sin_addr));
+#if !defined(USING_BOEHM_GC) && !defined(USING_NO_GC)
+    host->refcount--; // XXX this is not sane, but there is no better way
+                      // at the moment.
+#endif
     return ll__socket_sockname(host, addr.sin_port, 0, 0);
 }
 
-void LL__socket_freesockname(RPySOCKET_SOCKNAME *sockname)
-{
-	free(sockname);
-}
-
 /* ____________________________________________________________________________ */
 
 /* Lock to allow python interpreter to continue, but only allow one

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 17:04:45 2005
@@ -91,14 +91,15 @@
         py.test.raises(OSError, f1, *args)
 
 def test_connect():
+    import os
     from pypy.module._socket.rpython import rsocket
     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)
         sockname = rsocket.getpeername(fd)
-        port = sockname[1]
-        rsocket.freesockname(sockname)
-        return port
+        os.close(fd)
+        return sockname[1]
     f1 = compile(does_stuff, [])
-    assert f1() == 80
+    res = f1()
+    assert res == 80



More information about the Pypy-commit mailing list