Skip to content

Commit 2bdbc40

Browse files
committed
socket.recv read amount of bytes asked
1 parent 6c8584c commit 2bdbc40

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

tests/snippets/stdlib_socket.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@
1212
message_b = b'bbbbb'
1313

1414
connector.send(message_a)
15-
connector.close()
16-
recv_a = connection.recv(10)
15+
connection.send(message_b)
16+
recv_a = connection.recv(len(message_a))
17+
recv_b = connector.recv(len(message_b))
18+
assert recv_a == message_a
19+
assert recv_b == message_b
1720

1821
connection.close()
22+
connector.close()
1923
listener.close()
2024

vm/src/stdlib/socket.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,10 @@ fn socket_recv(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
223223
);
224224
match zelf.payload {
225225
PyObjectPayload::Socket { ref socket } => {
226-
let mut buffer = Vec::new();
227-
let _temp = match socket.borrow_mut().con {
228-
Some(ref mut v) => v.read_to_end(&mut buffer).unwrap(),
229-
None => 0,
226+
let mut buffer = vec![0u8; objint::get_value(bufsize).to_usize().unwrap()];
227+
match socket.borrow_mut().con {
228+
Some(ref mut v) => v.read_exact(&mut buffer).unwrap(),
229+
None => return Err(vm.new_type_error("".to_string())),
230230
};
231231
Ok(vm.ctx.new_bytes(buffer))
232232
}

0 commit comments

Comments
 (0)