diff options
author | Kermit Xuan <kermitlx@outlook.com> | 2020-06-13 22:14:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-13 10:14:31 -0400 |
commit | 77545219a6d5c9d474032ea5e8ccfcd69897d76b (patch) | |
tree | 17c9a2b1486507066952423e375ad3bc2600b004 | |
parent | f6fa65938437385a4ec00ec090f797381f6638b7 (diff) |
fix: DatagramConn.send should return bytes sent (#6265)
-rw-r--r-- | cli/js/lib.deno.unstable.d.ts | 2 | ||||
-rw-r--r-- | cli/js/net.ts | 7 | ||||
-rw-r--r-- | cli/js/ops/net.ts | 7 | ||||
-rw-r--r-- | cli/ops/net.rs | 15 | ||||
-rw-r--r-- | cli/tests/unit/net_test.ts | 4 |
5 files changed, 20 insertions, 15 deletions
diff --git a/cli/js/lib.deno.unstable.d.ts b/cli/js/lib.deno.unstable.d.ts index dc50416fc..0a80eb2c6 100644 --- a/cli/js/lib.deno.unstable.d.ts +++ b/cli/js/lib.deno.unstable.d.ts @@ -988,7 +988,7 @@ declare namespace Deno { /** UNSTABLE: new API, yet to be vetted. * * Sends a message to the target. */ - send(p: Uint8Array, addr: Addr): Promise<void>; + send(p: Uint8Array, addr: Addr): Promise<number>; /** UNSTABLE: new API, yet to be vetted. * * Close closes the socket. Any pending message promises will be rejected diff --git a/cli/js/net.ts b/cli/js/net.ts index 2de44c2ac..b2ee7b6d3 100644 --- a/cli/js/net.ts +++ b/cli/js/net.ts @@ -10,7 +10,7 @@ export { ShutdownMode, shutdown, NetAddr, UnixAddr } from "./ops/net.ts"; export interface DatagramConn extends AsyncIterable<[Uint8Array, Addr]> { receive(p?: Uint8Array): Promise<[Uint8Array, Addr]>; - send(p: Uint8Array, addr: Addr): Promise<void>; + send(p: Uint8Array, addr: Addr): Promise<number>; close(): void; @@ -109,11 +109,12 @@ export class DatagramImpl implements DatagramConn { return [sub, remoteAddr]; } - async send(p: Uint8Array, addr: Addr): Promise<void> { + async send(p: Uint8Array, addr: Addr): Promise<number> { const remote = { hostname: "127.0.0.1", ...addr }; const args = { ...remote, rid: this.rid }; - await netOps.send(args as netOps.SendRequest, p); + const byteLength = await netOps.send(args as netOps.SendRequest, p); + return byteLength; } close(): void { diff --git a/cli/js/ops/net.ts b/cli/js/ops/net.ts index f2d272fe9..98ee71ff8 100644 --- a/cli/js/ops/net.ts +++ b/cli/js/ops/net.ts @@ -73,7 +73,7 @@ export function receive( transport: string, zeroCopy: Uint8Array ): Promise<ReceiveResponse> { - return sendAsync("op_receive", { rid, transport }, zeroCopy); + return sendAsync("op_datagram_receive", { rid, transport }, zeroCopy); } export type SendRequest = { @@ -83,6 +83,7 @@ export type SendRequest = { export async function send( args: SendRequest, zeroCopy: Uint8Array -): Promise<void> { - await sendAsync("op_send", args, zeroCopy); +): Promise<number> { + const byteLength = await sendAsync("op_datagram_send", args, zeroCopy); + return byteLength; } diff --git a/cli/ops/net.rs b/cli/ops/net.rs index 2e627ddb9..57dcecab7 100644 --- a/cli/ops/net.rs +++ b/cli/ops/net.rs @@ -27,8 +27,11 @@ pub fn init(i: &mut CoreIsolate, s: &State) { i.register_op("op_connect", s.stateful_json_op2(op_connect)); i.register_op("op_shutdown", s.stateful_json_op2(op_shutdown)); i.register_op("op_listen", s.stateful_json_op2(op_listen)); - i.register_op("op_receive", s.stateful_json_op2(op_receive)); - i.register_op("op_send", s.stateful_json_op2(op_send)); + i.register_op( + "op_datagram_receive", + s.stateful_json_op2(op_datagram_receive), + ); + i.register_op("op_datagram_send", s.stateful_json_op2(op_datagram_send)); } #[derive(Deserialize)] @@ -161,8 +164,7 @@ fn receive_udp( Ok(JsonOp::Async(op.boxed_local())) } -// TODO(ry) Rename to op_datagram_receive -fn op_receive( +fn op_datagram_receive( isolate_state: &mut CoreIsolateState, state: &State, args: Value, @@ -192,8 +194,7 @@ struct SendArgs { transport_args: ArgsEnum, } -// TODO(ry) Rename to op_datagram_send -fn op_send( +fn op_datagram_send( isolate_state: &mut CoreIsolateState, state: &State, args: Value, @@ -222,7 +223,7 @@ fn op_send( .socket .poll_send_to(cx, &zero_copy, &addr) .map_err(OpError::from) - .map_ok(|_| json!({})) + .map_ok(|byte_length| json!(byte_length)) }); Ok(JsonOp::Async(f.boxed_local())) } diff --git a/cli/tests/unit/net_test.ts b/cli/tests/unit/net_test.ts index cda5a536e..9228315d8 100644 --- a/cli/tests/unit/net_test.ts +++ b/cli/tests/unit/net_test.ts @@ -240,7 +240,9 @@ unitTest( assertEquals(bob.addr.hostname, "127.0.0.1"); const sent = new Uint8Array([1, 2, 3]); - await alice.send(sent, bob.addr); + const byteLength = await alice.send(sent, bob.addr); + + assertEquals(byteLength, 3); const [recvd, remote] = await bob.receive(); assert(remote.transport === "udp"); |