[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