File tree Expand file tree Collapse file tree 4 files changed +103
-0
lines changed Expand file tree Collapse file tree 4 files changed +103
-0
lines changed Original file line number Diff line number Diff line change @@ -240,6 +240,14 @@ TCP stream connections
240
240
241
241
This is a coroutine.
242
242
243
+ .. method :: Stream.readinto(buf)
244
+
245
+ Read up to n bytes into *buf * with n being equal to the length of *buf *.
246
+
247
+ Return the number of bytes read into *buf *.
248
+
249
+ This is a coroutine, and a MicroPython extension.
250
+
243
251
.. method :: Stream.readline()
244
252
245
253
Read a line and return it.
Original file line number Diff line number Diff line change @@ -30,6 +30,10 @@ async def read(self, n):
30
30
yield core ._io_queue .queue_read (self .s )
31
31
return self .s .read (n )
32
32
33
+ async def readinto (self , buf ):
34
+ yield core ._io_queue .queue_read (self .s )
35
+ return self .s .readinto (buf )
36
+
33
37
async def readexactly (self , n ):
34
38
r = b""
35
39
while n :
Original file line number Diff line number Diff line change
1
+ # Test uasyncio stream readinto() method using TCP server/client
2
+
3
+ try :
4
+ import uasyncio as asyncio
5
+ except ImportError :
6
+ try :
7
+ import asyncio
8
+ except ImportError :
9
+ print ("SKIP" )
10
+ raise SystemExit
11
+
12
+ try :
13
+ import uarray as array
14
+ except ImportError :
15
+ try :
16
+ import array
17
+ except ImportError :
18
+ print ("SKIP" )
19
+ raise SystemExit
20
+
21
+ PORT = 8000
22
+
23
+
24
+ async def handle_connection (reader , writer ):
25
+ writer .write (b"ab" )
26
+ await writer .drain ()
27
+
28
+ writer .write (b"c" )
29
+ await writer .drain ()
30
+
31
+ print ("close" )
32
+ writer .close ()
33
+ await writer .wait_closed ()
34
+
35
+ print ("done" )
36
+ ev .set ()
37
+
38
+
39
+ async def tcp_server ():
40
+ global ev
41
+ ev = asyncio .Event ()
42
+ server = await asyncio .start_server (handle_connection , "0.0.0.0" , PORT )
43
+ print ("server running" )
44
+ multitest .next ()
45
+ async with server :
46
+ await asyncio .wait_for (ev .wait (), 10 )
47
+
48
+
49
+ async def tcp_client ():
50
+ reader , writer = await asyncio .open_connection (IP , PORT )
51
+
52
+ ba = bytearray (2 )
53
+ n = await reader .readinto (ba )
54
+ print (n )
55
+ print (ba [:n ])
56
+
57
+ a = array .array ("b" , [0 , 0 ])
58
+ n = await reader .readinto (a )
59
+ print (n )
60
+ print (a [:n ])
61
+
62
+ try :
63
+ n = await reader .readinto (5 )
64
+ except TypeError as er :
65
+ print ("TypeError" )
66
+
67
+ try :
68
+ n = await reader .readinto ()
69
+ except TypeError as er :
70
+ print ("TypeError" )
71
+
72
+
73
+ def instance0 ():
74
+ multitest .globals (IP = multitest .get_network_ip ())
75
+ asyncio .run (tcp_server ())
76
+
77
+
78
+ def instance1 ():
79
+ multitest .next ()
80
+ asyncio .run (tcp_client ())
Original file line number Diff line number Diff line change
1
+ --- instance0 ---
2
+ server running
3
+ close
4
+ done
5
+ --- instance1 ---
6
+ 2
7
+ bytearray(b'ab')
8
+ 1
9
+ array('b', [99])
10
+ TypeError
11
+ TypeError
You can’t perform that action at this time.
0 commit comments