[pypy-svn] r58653 - in pypy/branch/2.5-merge/pypy/module/_socket: . test
fijal at codespeak.net
fijal at codespeak.net
Mon Oct 6 15:34:35 CEST 2008
Author: fijal
Date: Mon Oct 6 15:34:34 2008
New Revision: 58653
Modified:
pypy/branch/2.5-merge/pypy/module/_socket/interp_socket.py
pypy/branch/2.5-merge/pypy/module/_socket/test/test_sock_app.py
Log:
(fijal, jlg) recv_into, recvfrom_into in socket objects.
Modified: pypy/branch/2.5-merge/pypy/module/_socket/interp_socket.py
==============================================================================
--- pypy/branch/2.5-merge/pypy/module/_socket/interp_socket.py (original)
+++ pypy/branch/2.5-merge/pypy/module/_socket/interp_socket.py Mon Oct 6 15:34:34 2008
@@ -304,6 +304,34 @@
space.wrap('Timeout value out of range'))
self.settimeout(timeout)
settimeout_w.unwrap_spec = ['self', ObjSpace, W_Root]
+
+ def recv_into_w(self, space, w_buffer, nbytes=0, flags=0):
+ rwbuffer = space.rwbuffer_w(w_buffer)
+ lgt = rwbuffer.getlength()
+ if nbytes == 0 or nbytes > lgt:
+ nbytes = lgt
+ try:
+ return space.wrap(self.recvinto(rwbuffer, nbytes, flags))
+ except SocketError, e:
+ raise converted_error(space, e)
+
+ recv_into_w.unwrap_spec = ['self', ObjSpace, W_Root, int, int]
+
+ def recvfrom_into_w(self, space, w_buffer, nbytes=0, flags=0):
+ rwbuffer = space.rwbuffer_w(w_buffer)
+ lgt = rwbuffer.getlength()
+ if nbytes == 0 or nbytes > lgt:
+ nbytes = lgt
+ try:
+ readlgt, addr = self.recvfrom_into(rwbuffer, nbytes, flags)
+ if addr:
+ w_addr = addr.as_object(space)
+ else:
+ w_addr = space.w_None
+ return space.newtuple([space.wrap(readlgt), w_addr])
+ except SocketError, e:
+ raise converted_error(space, e)
+ recvfrom_into_w.unwrap_spec = ['self', ObjSpace, W_Root, int, int]
def shutdown_w(self, space, how):
"""shutdown(flag)
@@ -390,7 +418,7 @@
accept bind close connect connect_ex dup fileno
getpeername getsockname getsockopt gettimeout listen makefile
recv recvfrom send sendall sendto setblocking
-setsockopt settimeout shutdown _reuse _drop
+setsockopt settimeout shutdown _reuse _drop recv_into recvfrom_into
""".split()
# Remove non-implemented methods
for name in ('dup',):
Modified: pypy/branch/2.5-merge/pypy/module/_socket/test/test_sock_app.py
==============================================================================
--- pypy/branch/2.5-merge/pypy/module/_socket/test/test_sock_app.py (original)
+++ pypy/branch/2.5-merge/pypy/module/_socket/test/test_sock_app.py Mon Oct 6 15:34:34 2008
@@ -507,7 +507,36 @@
# done
cli.close()
t.close()
-
+
+ def test_recv_into(self):
+ import socket
+ import array
+ MSG = 'dupa was here\n'
+ cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ cli.connect(self.serv.getsockname())
+ conn, addr = self.serv.accept()
+ buf = buffer(MSG)
+ conn.send(buf)
+ buf = array.array('c', ' '*1024)
+ nbytes = cli.recv_into(buf)
+ assert nbytes == len(MSG)
+ msg = buf.tostring()[:len(MSG)]
+ assert msg == MSG
+
+ def test_recvfrom_into(self):
+ import socket
+ import array
+ MSG = 'dupa was here\n'
+ cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ cli.connect(self.serv.getsockname())
+ conn, addr = self.serv.accept()
+ buf = buffer(MSG)
+ conn.send(buf)
+ buf = array.array('c', ' '*1024)
+ nbytes, addr = cli.recvfrom_into(buf)
+ assert nbytes == len(MSG)
+ msg = buf.tostring()[:len(MSG)]
+ assert msg == MSG
class AppTestErrno:
def setup_class(cls):
@@ -527,3 +556,4 @@
assert errno.errorcode[e.args[0]].endswith("EINVAL")
assert isinstance(e.args[1], str)
+
More information about the Pypy-commit
mailing list