[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