[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